tur*_*oup 43 c++ multithreading c++11
我问的<thread>是C++ 11标准的库.
假设您有以下功能:
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??*/);
}
Run Code Online (Sandbox Code Playgroud)
你如何将所有这些参数传递给线程?我尝试列出如下参数:
std::thread(func1, a,b,c,d);
Run Code Online (Sandbox Code Playgroud)
但它抱怨说没有这样的构造函数.解决这个问题的一种方法是定义一个包装参数的结构,但还有另一种方法吗?
aar*_*man 53
你真的只是传递它们std::thread(func1,a,b,c,d);应该编译如果对象存在,但它是错误的另一个原因.由于没有创建对象,因此无法加入或分离线程,程序将无法正常工作.因为它是一个临时的析构函数被立即调用,因为线程没有被连接或分离但是std::terminate被调用.在温度被破坏之前,你可能std::join或std::detach它可以std::thread(func1,a,b,c,d).join();//or detach.
这是应该怎么做的.
std::thread t(func1,a,b,c,d);
t.join();
Run Code Online (Sandbox Code Playgroud)
如果你不知道连接和分离之间的区别,你也可以分离线程,读取线程.