如何在 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)