将多个参数传递到 std: : thread

我要求使用 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);

但是它抱怨没有这样的构造函数。解决这个问题的一个方法是定义一个结构来打包参数,但是有其他的方法吗?

153710 次浏览

实际上,您只是在 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();

还可以分离线程,如果不知道连接和分离之间的区别,可以读取线程。

如果你得到了这个,你可能已经忘记把 #include <thread>放在你的文件的开头。OP 的签名看起来应该可行。

也有同样的问题。我正在传递一个自定义类的非常量引用,构造函数出现了问题(一些元组模板错误)。用指针替换了引用,它工作了。