线程传递参数
c++ 11中,创建线程是对线程类thread 的对象构造。参数是线程入口函数指针,函数参数。
void dosomething(int i,string const& s ){}
char buff[] = "Hello";
//先构造myObj,再构造 string s
thread myObj( dosomething, 3, buff);
//线程入口函数虽然是引用,但并没有与主线程中buff,绑定。
//1线程对象myObj 构造时,构造函数会复制主线程提供变量
//构造函数复制一个 int变量,char *,上述动作是在主线程完成
//子线程启动后,将构造函数复制变量 给线程函数,此时线程函数 s绑定的是构造函数中变量,并进行了隐式转换
解决办法
//先构造一个string,再构造一个myObj
thread myObj( dosomething, 3 , (std::ref) (string(buff)) );
//子线程实际上自己创建属于自己线程对象。

浙公网安备 33010602011771号