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

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::joinstd::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)

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

  • 我正在尝试这个,但它一直告诉我,有无效的参数...`线程t(storePose,x_position,y_position,z_position,azimuth,att_pitch,att_roll,yaw,cam_pitch,cam_roll);`这是我的线程,storePose是func名称有九个双参数.它一直说没有构造函数`std :: thread :: thread`的实例 (4认同)
  • 问题解决了,我是个白痴,因为我声明了两个名字都是 func1 的方法,编译器抱怨,因为它不知道我在使用哪个方法。你的方法确实有效。谢谢 (2认同)

Jiř*_*iří 8

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