C 11 建立乙個執行緒

2021-08-24 21:00:51 字數 923 閱讀 1011

#include class sometask

}private:

void work(int n , char c)

private:

std::thread taskthread_;

};

如**所示,方法start啟動乙個執行緒,執行緒執行本類的另乙個方法work。

thread的第乙個建構函式為無參建構函式:thread() _noexcept; 上面**的std::thread  taskthread_;就是乙個例子。這個物件內部不包含執行緒。可以認為這樣的物件只是乙個空殼而已。

thread的第二個建構函式:templateexplicit thread(fn&& f,args&&... a); 模板引數f處可以傳遞乙個可呼叫物件作為實參,本例中是成員函式work。a是乙個可變模板引數,可以傳遞任意個實參。本裡中傳遞了三個。

模板引數a處,應傳入乙個可呼叫物件作為實參。本例中使用了函式的指標。對於普通的全域性函式或者類的靜態函式,函式名或者函式名取位址(fun、someclass::fun或&fun、&someclass::fun)得到的都是函式的指標。因為不管是否加&符號,獲得的都是這個函式的位址(雖然值都是函式的位址,但不帶&時型別是函式,帶上&則是函式指標)。對於類的例項函式,必須採用&someclass::fun的形式。如果捨去&,得到的不是這個函式的位址。

再分析taskthread_ = std::thread(&sometask::work,this,100,'a');中的「=」(移動賦值操作符)。左值:taskthread_,右值:臨時物件,thread的有參建構函式建立。如前所述,左值不包含執行緒,右值包含執行緒。在=操作符的作用下,左值獲取的右值的執行緒,右值成了乙個空殼。

為什麼把執行緒轉移給taskthread_呢?因為taskthread_的生存期長,為了保證包含執行緒的thread物件不被析構。

C 11 寫乙個執行緒池

多併發時避免系統不斷的建立和銷毀執行緒,過度消耗資源 切換等,一般都使用執行緒池來管理執行緒。可以讓乙個執行緒重複執行多個任務而提高效率,話不多說使用c 11 特性寫了乙個執行緒詞,直接上 記錄一下,輪子就可以復用啦!執行緒池的作用 非同步解耦!主要構成 執行緒,任務,管理元件。singleton....

多執行緒(c 11) 建立執行緒

c 11 中建立執行緒非常簡單 include include using namespace std void thread func void thread func2 int i int main int argc,tchar argv thread t2 return 0 首先包含標頭檔案,...

C 11實現乙個簡單的執行緒池

為了不讓手生,邊複習邊手擼了乙個執行緒池,量比較少,如下,用了一些c 11的實現,語言標準嘛,就是跨平台的 thread poo.h ifndef thread pool define thread pool include include include include include inclu...