三种创建方法:
用一个初始函数创建一个线程
#include <iostream>
#include <thread>
using namespace std;
void print1()
{
cout << "print1_1线程执行" << endl;
cout << "print1_2线程执行" << endl;
cout << "print1_3线程执行" << endl;
}
int main()
{
thread mythread1(print1);
mythread1.join();
cout << "主线程执行" << endl;
return 0;
}
用类对象创建一个线程
#include <iostream>
#include <thread>
using namespace std;
class T
{
public:
void operator()()
{
cout << "print2_1线程执行" << endl;
cout << "print2_2线程执行" << endl;
cout << "print2_3线程执行" << endl;
}
};
int main()
{
T t;
thread mythread2(t);
mythread2.join();
cout << "主线程执行" << endl;
return 0;
}
用lambda表达式创建一个线程
#include <iostream>
#include<thread>
using namespace std;
int main()
{
//用lambda表达式创建一个线程
auto mylamthread = [] {//这是一个lambda表达式
cout << "我的线程开始执行了" << endl;
//......
cout << "我的线程执行结束了" << endl;
};
thread mythread3(mylamthread);
mythread3.join();
cout << "主线程执行结束" << endl;
return 0;//表示主线程执行结束,表明进程结束
}
join()函数是一个等待线程完成函数,主线程需要等待子线程运行结束了才可以结束
detach()函数是子线程的分离函数,当调用该函数后,线程就被分离到后台运行,主线程不需要等待该线程结束才结束;称为守护线程或者分析线程。
linux 启动程序变为后台进程,可以使用在最后加入&即可;
注意:detach 线程后注意子线程和主线程中变量的关系,防止引用或者指针主线程释放的场景,导致子线程异常。
用于判断程序是否可以使用detach或者join方法
原文:https://www.cnblogs.com/lihaihui1991/p/14272556.html