自C++11開始后C++有了標準的執行緒庫:std::thread,各種支持C++11及更改版本的IDE都可以使用,便于是使用C++開發多執行緒庫供多平臺使用,
話不多說,直接上代碼簡單明了:
例程1:

運行后發現執行緒函式正常運行,但是程式會報錯,如下所示:
這是因為創建了執行緒后執行緒開始執行,但是主執行緒main()并沒有停止腳步,仍然繼續執行然后退出,此時創建的子執行緒還在運行,執行緒仍然存在但指向它的執行緒物件已經銷毀,所以會拋出例外,那么怎樣才能保證主執行緒在子執行緒退出后再退出呢?


運行結果:
本次運行正常沒有再出現例外,可從運行結果可以看到“this is Main”這句話是在子執行緒運行完成后才列印的,這說明thread::join()介面會堵塞主執行緒,thread::detach()thread::detach()介面也可以解決最開始的例外問題,
如果你在學習C/C++的程序中遇到了問題,可以來加入小編的企鵝圈問小編哦~小編很熱情的(●’?’●)
detach是用來和執行緒物件分離的,這樣執行緒可以獨立地執行,不過這樣由于沒有thread物件指向該執行緒而失去了對它的控制,當物件析構時執行緒會繼續在后臺執行,但是當主程式退出時并不能保證執行緒能執行完,如果沒有良好的控制機制或者這種后臺執行緒比較重要,最好不用detach而應該使用join,

int main(int argc, char *argv[]){
std::thread t1(f1);
std::thread t2(f2);
t1.detach();
t2.detach();
std::cout << "this is Main \n";
return 0;
}
由結果可見執行緒并沒有執行完而退出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/224480.html
標籤:其他
上一篇:LeetCode 1030. 距離順序排列矩陣單元格 | Python
下一篇:QT中實作C++使用執行緒操作
