std::thread用于启动线程,可以用作跨平台的线程库。
它启动线程的方式很灵活,可以支持C函数,类成员函数,类静态函数等。
#include <thread> //头文件
#include <iostream>
using namespace std;
void fn1(void)
{
cout << "fn1" << endl;
}
void fn2(int a)
{
cout << "fn2 " << a << endl;
}
void fn3(int &a)
{
cout << "fn3 " << a << endl;
}
class cls
{
public:
void fn1(int a)
{
cout << "cls::fn1" << endl;
}
};
int main()
{
std::thread t1(&fn1); //线程对象构造后,即开始执行
//可被 joinable 的 thread 对象必须在他们销毁之前被主线程 join 或者将其设置为 detached
t1.join(); //必须执行join,不然运行期错误
std::thread t2(&fn2, 2); //传入函数参数
t2.join();
int n = 2;
std::thread t3(&fn3, std::ref(n)); //传入引用参数
t3.join();
cls c;
//线程入口为类成员函数
std::thread t4(&cls::fn1, &c, 2);
t4.join();
return 0;
}