C 11執行緒封裝

2021-10-18 04:54:50 字數 3274 閱讀 1072

下面是我對執行緒的封裝.

子執行緒可以設定執行函式,可以阻塞子執行緒,可以喚醒子執行緒,可以設定子執行緒while迴圈函式的休眠時間。

這例子可以用來學習c++11多執行緒,也可以直接拿來使用。

#ifndef smart_thread_h

#define smart_thread_h

#include #include #include #include #include #include /**

* @brief the smartthread class

*/class smartthread

private:

static void majorfunc();

private:

static int _intervalms;

static bool _runflag,_blockflag;

static std::condition_variable _condvab;

static std::mutex _mtx;

std::thread _thd;

// static std::function&) > _func;

static std::function_func;

};#endif

下面是main函式

int main()

程式輸出為:

10:28:19: starting e:\gitfile\cpp_demo\build-thread_demo-cmake_kit-debug\thread_demo.exe ...

main ----

[debug | 2021-01-29 10:28:19,112] main---

main tid:1

smartthread before while

smart thread tid:2

[debug | 2021-01-29 10:28:19,113] stfunc run,current tims ms:1611887299113

[debug | 2021-01-29 10:28:19,224] stfunc run,current tims ms:1611887299224

[debug | 2021-01-29 10:28:19,335] stfunc run,current tims ms:1611887299335

[debug | 2021-01-29 10:28:19,446] stfunc run,current tims ms:1611887299446

[debug | 2021-01-29 10:28:19,556] stfunc run,current tims ms:1611887299556

[debug | 2021-01-29 10:28:19,612] block smart thread;

smartthread-block before

[debug | 2021-01-29 10:28:20,113] notify smart thread.

smartthread-block after

[debug | 2021-01-29 10:28:20,113] stfunc run,current tims ms:1611887300113

[debug | 2021-01-29 10:28:20,224] stfunc run,current tims ms:1611887300224

[debug | 2021-01-29 10:28:20,335] stfunc run,current tims ms:1611887300335

[debug | 2021-01-29 10:28:20,446] stfunc run,current tims ms:1611887300446

[debug | 2021-01-29 10:28:20,557] stfunc run,current tims ms:1611887300557

[debug | 2021-01-29 10:28:20,669] stfunc run,current tims ms:1611887300669

[debug | 2021-01-29 10:28:20,780] stfunc run,current tims ms:1611887300780

[debug | 2021-01-29 10:28:20,892] stfunc run,current tims ms:1611887300892

[debug | 2021-01-29 10:28:21,003] stfunc run,current tims ms:1611887301003

[debug | 2021-01-29 10:28:21,114] stfunc run,current tims ms:1611887301114

[debug | 2021-01-29 10:28:21,225] stfunc run,current tims ms:1611887301225

[debug | 2021-01-29 10:28:21,337] stfunc run,current tims ms:1611887301337

[debug | 2021-01-29 10:28:21,449] stfunc run,current tims ms:1611887301449

[debug | 2021-01-29 10:28:21,559] stfunc run,current tims ms:1611887301559

[debug | 2021-01-29 10:28:21,670] stfunc run,current tims ms:1611887301670

[debug | 2021-01-29 10:28:21,781] stfunc run,current tims ms:1611887301781

[debug | 2021-01-29 10:28:21,892] stfunc run,current tims ms:1611887301892

[debug | 2021-01-29 10:28:22,004] stfunc run,current tims ms:1611887302004

10:28:22: e:\gitfile\cpp_demo\build-thread_demo-cmake_kit-debug\thread_demo.exe exited with code 0

原始碼位址 thread_demo

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...

C 11 多執行緒

2011 年 c 迎來重大的改革 語言層面上承認了 多執行緒 程式的存在 加入了 thread 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...