线程传递参数

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)) );

//子线程实际上自己创建属于自己线程对象。

posted @ 2020-07-27 13:40  水水$88  阅读(148)  评论(0)    收藏  举报