如何在 C++ 类中创建四个线程

Posted

技术标签:

【中文标题】如何在 C++ 类中创建四个线程【英文标题】:How to make four threads in a class C++ 【发布时间】:2016-05-22 06:09:29 【问题描述】:

我无法在一个类中创建四个线程,每个线程都使用另一个成员函数来打印每个向量的内容。但是,当我创建线程时,我在这 4 行上收到错误 no instance of constructor "std::thread::thread" matches the argument list。如果我试图为线程使用另一个成员函数,我不知道为什么它不起作用。难道是因为他们在一个班里?我将如何解决这 4 个错误?

class PrintfourVectors

private:
    vector<string> one;
    vector<string> two;
    vector<string> three;
    vector<string> four;
public:
    void printOne()
    
        // do stuff
    

    void printTwo()
    
        // do stuff
    


    void printThree()
    
        // do stuff
    

    void printFour()
    
        // do stuff
    

    void makeFourThreads()
    
        thread threadone(printOne);   // error here
        thread threadtwo(printTwo);   // error here
        thread threadthree(printThree); // error here
        thread threadfour(printFour); // error here

        threadone.join();
        threadtwo.join();
        threadthree.join();
        threadfour.join();

    

;

【问题讨论】:

【参考方案1】:

一个问题是您正在调用非静态成员函数,而这些函数有一个“隐藏”的第一个参数,该参数成为函数中的 this 指针。因此,在使用非静态成员函数创建线程时,您需要将对象实例作为参数传递给线程函数。

喜欢

thread threadone(&PrintfourVectors::printOne, this);
//                                            ^^^^
// Pass pointer to object instance as argument to the thread function

【讨论】:

以上是关于如何在 C++ 类中创建四个线程的主要内容,如果未能解决你的问题,请参考以下文章

怎样在arcengine中创建一个要素数据集。建立一个要素数据集,数据集下面建四个要素,分别是线要素和面要素

如何在一个类中执行 C++ 多线程(将线程引用保持为成员 var)

如何使用 C++ 在 Windows 中创建守护线程?

如何检查是不是在 Visual C++ 应用程序中的第三方 DLL 中创建了新线程

如何设法在 C++ 中创建矢量类?

c ++如何在原始抽象类中创建一个接受派生类输入的函数