#include<iostream>
#include<string>
#include<thread>
using namespace std;
class TA
{public:
void operator()()
{cout<<"\n类方法(仿函数方法)子线程在运行"<<endl;}
};
void myPrint()
{ for(int i=0;i<10;i++)
{
cout<<"\n函数法子线程在运行"<<endl;
}
}
int main()
{
cout<<endl;
//主线程(即本c++文件)
cout<<"\n主线程单击后结束"<<endl; //这一语句代表主线程在运行
//函数名作为参数的子线程
thread myThread01(myPrint); //声明thread对象myThread01,并将函数名myPrint作为参数传入;
//注意函数名没有括号,亦即thread对象的参数不能再有参数;
//这个函数内有循环运行时间长,各子线程是独立运行的,其它
//子线程运行结果可能会插入到这个子线程的运行结果中。
//兰布达表达式作为参数的子线程
auto myLambda = [] {cout << "\nlambda子线程在运行" << endl; };
thread myThread02(myLambda);//声明thread对象myThread02,并将兰布达表达式作为参数传入
//lambuda表达式作为thread对象参数时也不能再带有参数
//类对象(仿函数)作为参数的子线程
TA ta;
thread myThread03(ta); //声明thread对象myThread03,并将仿函数作为参数传入
myThread01.join(); //子线程与主线程关联,保证在子线程执行完毕前主线程不结束
myThread02.join();
myThread03.join();
cout<<endl;
system("pause");
return 0;
}
//运行结果如下:
//主线程单击后结束
//函数法子线程在运行
//类方法(仿函数方法)子线程在运行
//lambda子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//函数法子线程在运行
//请按任意键继续. . .