其他创建线程的手法:
用类对象(可调用对象),就会执行operator这个函数。
这样的程序每次执行结果都不一样。
//线程中使用了主线程的局不变量,主线程执行结束后,i内存被回收。子线程还在使用i的引用,会出现不可知的情况。
一旦调用detach(),主线程的TA对象还在吗?
答:这个对象不在了,但是没有关系,因为这个对象是被复制到了子线程中去。
执行完主线程ta会被销毁,但是复制的对象依旧存在。
所以,只要子线程中没引用或者指针,那么就不会出什么问题。
class TA
{
public:
void operator()()
{
cout<<"我的线程开始执行了"<<endl;
cout<<"我的线程结束了"<<endl;
}
};
int main()
{
TA ta;
thraed my_th(ta);//可调用对象
my_th.join();
cout<<"I LOve CHNIA"<<endl;
return 0;
}
-------------------------------------------------
class TA
{
public:
TA(int i):m_i(i){
cout<<"TA构造函数执行"<<endl;
}
TA(const TA ta):m_i(ta.m_i)
{
cout<<"拷贝构造函数执行"<<endl;
}
~TA()
{
cout<<"TA析构函数执行"<<endl;
}
void operator()()
{
cout<<"m_i:"<<m_i<<endl;
cout<<"m_i:"<<m_i<<endl;
cout<<"m_i:"<<m_i<<endl;
cout<<"m_i:"<<m_i<<endl;
}
int m_i;
};
int main()
{
int i=6;
TA ta(i);
thraed my_th(ta);//可调用对象,拷贝了
my_th.detach();
cout<<"I LOve CHNIA"<<endl;
return 0;
}
使用:lambda表达式创建线程
int main()
{
auto mylambda = []
{
cout<<"我的线程开始执行了"<<endl;
cout<<"我的线程结束了"<<endl;
};
thread myth(mylambda);
myth.jion();
cout<<"I LOve CHNIA"<<endl;
return ;
}