91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++11啟動線程的方式有哪些

發布時間:2021-09-15 11:58:51 來源:億速云 閱讀:219 作者:chen 欄目:編程語言

這篇文章主要介紹“C++11啟動線程的方式有哪些”,在日常操作中,相信很多人在C++11啟動線程的方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++11啟動線程的方式有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、函數指針方式

函數指針方式啟動線程是最原始、最基礎的方式。定義實現線程的處理函數ThreadFunction,然后啟動線程的時候,將函數指針傳達給線程類的構造函數。

C++11啟動線程的方式有哪些

啟動線程之后,打印了如下信息,說明線程啟動之后,調用了線程處理函數。

C++11啟動線程的方式有哪些

二、函數對象方式

第二種啟動線程的方式是采用函數對象的形式,首先創建類ThreadOpeartor,然后該類重載operator()運算符,最后以仿函數的形式作為線程的參數傳遞給線程來啟動。

C++11啟動線程的方式有哪些

同樣的,運行程序之后,串口上可以查看到如下信息,說明函數對象方式啟動線程是生效的。

C++11啟動線程的方式有哪些

三、lambda方式

第三種啟動線程的方式是lambda函數形式,lambda函數即匿名函數,它作為線程的參數來啟動線程。

C++11啟動線程的方式有哪些

編譯運行程序之后,也可以確認線程啟動的時候,調用了lambda函數。

C++11啟動線程的方式有哪些

四、類函數指針方式

第四種啟動線程的方式是類函數指針形式,先在類成員之中定義類成員函數,然后以函數指針作為參數來啟動線程。

C++11啟動線程的方式有哪些

從運行結果看,啟動的線程成功調用了類的成員函數。

C++11啟動線程的方式有哪些

五、std::bind方式

第五種啟動線程的方式是stb::bind形式, 首先是類成員函數作為stb::bind的參數, 然后stb::bind再作為線程參數來啟動線程。

C++11啟動線程的方式有哪些

編譯成功之后,運行程序的結果如下,這也說明std::bind方式啟動線程是可行的。

C++11啟動線程的方式有哪些

六、啟動方式優缺點

函數指針啟動線程的方式是一種比較老的方式,linux系統中pthread庫是支持的,是屬于面向過程的思想,如果使用的系統不支持C++11, 那么可以采用這種方式。

函數對象啟動線程的方式可以在類內部定義更多的細節,比如定義成員變量,將更多的邏輯處理細節進行封裝。

lambda函數啟動線程的方式是代碼比較簡潔,由于函數是內嵌形式,可讀性也比較好,它適用于線程處理函數的邏輯不是很復雜的場景。

類函數指針啟動線程的方式,線程的處理函數是屬于類,所以需要注意其生命周期。

std::bind啟動線程的方式,它可以與std::function結合起來,實現函數回調功能。

七、線程應用場景

本節將采用函數對象的形式啟動線程,說明如何應用到實際的應用中。

假設有不同的命令,需要在線程中執行,首先實現命令基類

C++11啟動線程的方式有哪些

然后創建執行命令類JWorkThread, 并重載operator() 運算符, 并且內部執行命令。

C++11啟動線程的方式有哪些

接著現在有一個類JRunCmd繼承基類JCommand,則調用方式如下所示

C++11啟動線程的方式有哪些

到此,關于“C++11啟動線程的方式有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

天镇县| 台安县| 天气| 新竹县| 永修县| 德兴市| 望奎县| 太谷县| 舞钢市| 浦东新区| 富宁县| 鄢陵县| 革吉县| 呼和浩特市| 桑植县| 广平县| 大连市| 瑞安市| 上饶市| 连州市| 永福县| 浏阳市| 湖南省| 永嘉县| 正定县| 闻喜县| 新龙县| 郯城县| 龙岩市| 兴安盟| 乐都县| 青州市| 临城县| 安化县| 新源县| 池州市| 武山县| 临颍县| 德昌县| 和平区| 莱州市|