#include
join()主要是指當建立子執行緒後,子執行緒執行,主線程要在某個地方等待子執行緒執行完畢。
detach() 建立子執行緒後,子執行緒與主線程分離稱為守護執行緒,它的資源之內的東西,由系統管理。
使用detach()時,要避免使用主線程中的引用,指標之內的東西。否則當主線程釋放相應資源時,子執行緒可能出現未知的bug。
*** join() 與detach()*** 不能同時使用。
joinable() 主要用於判斷當前位置是否能夠使用join() 或者 detach(), 返回值為true或者false
1. 函式方式
#include "pch.h"
#include #include using namespace std;
void myprintf()
int main()
;int main()
return 0;
}
注意在使用detach() 時不要在類中使用與主線程相關的引用和指標
當主線程結束時相應的資源被釋放,而守護執行緒是引用主線程的資源,這樣可能會出現未知的bug.
問題2. 當使用detach()時,傳的類會有影響嗎?
不會的,類在使用執行緒時,會呼叫複製建構函式
2. lambda
auto lamdathread = ;
thread mythread3(lamdathread);
mythread3.join();
使用lambda函式建立執行緒還可以避免這樣一種情況。class a
};int main()
注意這裡的情況std::thread my_thread(a());
,這裡會把這a()是乙個右值,這裡可能把這個當成乙個函式定義,函式名是my_thread 引數是乙個a物件,返回是乙個std::thread
避免這種情況可以再加一對括號std::thread my_thread((a()));
或者寫成lambda函式。
3.類物件內部使用某個子成員函式建立執行緒
這種情況通常會加上this引數
class a
void do_other_thing
};
類外使用記得建立物件,或將使用的函式申明成staticint main()
多執行緒的建立
每乙個程序都必須有乙個主線程,在主線程中我們可以建立多個執行緒。建立執行緒的方法有以下幾種 一 繼承thread類 這種方法需要重寫run方法,非常簡單,但同時會使 結構混亂而且降低可讀性。package p1 public class mythread extends thread 通過宣告建立的...
建立多執行緒
多執行緒 乙個程式可以同時執行多個任務,每個任務由 乙個單獨的 執行緒完成,可提高程式執行速度和處理速度 執行緒為程式執行的基本單位 2.建立乙個執行緒類的物件。threaddemo1 td new threaddemo1 3.啟動執行緒執行 td.start 1.建立實現runable介面的雷,並...
執行緒的建立與多執行緒
多執行緒執行緒建立的方式 一 使用此方式建立的執行緒為守護執行緒 import thread import threading deffn1 a,b print a,b print threading.current thread name defcreate thread1 引數一 在子執行緒中要...