- 运行起来的程序就是进程,每个进程都有一个主线程,主线程运行完毕,则进程结束
- 可以自己写代码来运行子线程,一般情况下,主线程运行结束后,子线程就也随之结束
- 一般情况下,使用join函数,使主线程等待子线程运行结束后再运行
- 使用detach函数,可使主线程和子线程各自独立运行,互不影响各自生命周期, 但这样主线程结束后,子线程的输出转到后台进行无法在输出在屏幕上,不好监控,不推荐
- 线程参数:必须是一个可调用对象(函数、函数指针、lambda表达式、bind创建的对象、其他重载了函数调用运算符的类对象)
#include <iostream>
#include <thread>
using namespace std;
void myPrint(){
cout << "函数 我的线程开始运行啦 " << endl;
cout << "函数 我的线程运行结束啦" << endl;
}
class TA{
public:
int m_1i;
TA(int &i):m_1i(i) {
cout << "TA()构造函数被执行" << endl;
}
TA(const TA &ta):m_1i(ta.m_1i){
cout << "TA()拷贝构造函数被执行" << endl;
}
~TA(){
cout << "TA()析构函数被执行" << endl;
}
void operator( )(){
cout << "m_i 1 的值为 " << m_1i << endl;
cout << "m_i 2 的值为 " << m_1i << endl;
cout << "m_i 3 的值为 " << m_1i << endl;
cout << "m_i 4 的值为 " << m_1i << endl;
}
};
class Data{
public:
void GetMsg() { cout << "将Data类中的GetMsg函数作为线程入口" << endl; }
void SaveMsh() { cout << "将Data类中的SaveMsg函数作为线程入口" << endl; }
};
int main(){
thread myThread1(myPrint);
myThread1.join();
if ( !myThread1.joinable() ){
cout << "成功调用 join()" << endl;
}else{
cout << "不能调用 jion()" << endl;
}
auto lambdaThread = []{
cout << "lambda表达式 我的线程开始运行啦 " << endl;
cout << "lambda表达式 我的线程结束运行啦 " << endl;
};
thread myThread3(lambdaThread);
myThread3.join();
int myi = 9;
TA ta(myi);
thread myThread2(ta);
myThread2.detach();
Data s;
thread oneobj(&Data::GetMsg, &s);
thread twoobj(&Data::SaveMsh, &s);
oneobj.join();
twoobj.join();
cout << " 在主线程中: I love China !" << endl;
return 0 ;
}