一、介紹
主線程從main()函數開始執行,我們建立的線程也需要一個函數作為入口開始執行,是以第一步先初始化函數。整個程序是否執行完畢的标志是主線程是否執行完畢,一般情況下,如果想要保持子線程的運作狀态,那麼要主線程保持運作
二、使用
join(),阻塞主線程,等待子線程執行完畢後,才到主線程執行。
detach(),分離主線程,主線程和子線程各走各的,是以會出現多次運作會發現,運作結果可能不同,這時候需要考慮一個問題,主線程如果執行完了,子線程還沒跑完,這就可能出現一定問題了。
joinable(),判斷是否使用了join()或者detach(),是傳回false,否傳回true。
#include <iostream>
#include <thread>
void my_thread()
{
for (int i = 1; i <= 5; i++)
{
cout << "my_thread" << i << endl;
}
}
int main()
{
thread my_threadObj(my_thread); //建立一個子線程,并傳入子線程的函數入口my_thread
if (my_threadObj.joinable()) //傳回true代表沒有使用join()或者detch()
{
my_threadObj.join(); //阻塞主線程,并讓主線程等待子線程執行完
}
else
{
return -1;
}
//my_threadObj.detach(); //分離主線程,子線程與主線程各自運作,是以每次運作結果可能不同
for (int i = 1; i <=5; i++)
{
cout << "main_thread" << i << endl;
}
return 0;
}
運作結果

void my_thread()
{
for (int i = 1; i <= 5; i++)
{
cout << "my_thread" << i << endl;
}
}
int main()
{
thread my_threadObj(my_thread); //建立一個子線程,并傳入子線程的函數入口my_thread
my_threadObj.detach(); //分離主線程,子線程與主線程各自運作,是以每次運作結果可能不同
for (int i = 1; i <= 5; i++)
{
cout << "main_thread" << i << endl;
}
return 0;
}
運作結果
參考:
C++多線程基礎學習筆記(二) - main(0) - 部落格園