我在问C++11标准中的<thread>
库。
假设您有一个函数,如:
void func1(int a, int b, ObjA c, ObjB d){
//blahblah implementation
}
int main(int argc, char* argv[]){
std::thread(func1, /*what do do here??*/);
}
如何将所有这些参数传递到线程中?我试着列出如下参数:
std::thread(func1, a,b,c,d);
但是它抱怨说没有这样的构造函数,一种解决方法是定义一个结构来封装参数,但是有没有其他的方法呢?
4条答案
按热度按时间q3qa4bjr1#
你实际上只是在
std::thread(func1,a,b,c,d);
中传递它们,如果对象存在的话,std::thread(func1,a,b,c,d);
应该已经编译了,但是由于另一个原因,它是错误的。因为没有创建对象,所以你不能加入或分离线程,程序将不能正常工作。因为它是一个临时的析构函数,所以它会立即被调用。因为线程还没有连接或分离,所以std::terminate
被调用。您可以在临时文件被销毁之前使用std::join
或std::detach
,如std::thread(func1,a,b,c,d).join();//or detach
。这是应该做的。
你也可以分离线程,如果你不知道连接和分离之间的区别,阅读线程。
qybjjes12#
有同样的问题。我传递了一个自定义类的非常量引用,构造函数抱怨(一些元组模板错误)。用指针替换引用,它工作了。
aurhwmvo3#
如果错误消息显示
那么很可能是因为您忘记将C标准指定为11。对于g编译器:
eimct9ow4#
如果你得到这个,你可能忘记了把
#include <thread>
放在文件的开头,OP的签名看起来应该可以工作。