日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
基于C++11,介紹啟動線程的五種方式

程序開發(fā)過程中,經(jīng)常會面對各種各樣的需求場景,如果采用單線程的處理方式,那么是很難滿足要求,所以,需要采用多線程的方式來處理,而這就涉及到啟動線程的方式。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、望城網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

本文將首先說明啟動線程的五種方式,然后再分析五種方式的優(yōu)缺點,最后通過一個示例來說明如何將線程運用到實際的場景中,并總結五種啟動線程的特性。

一、函數(shù)指針方式

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

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

二、函數(shù)對象方式

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

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

三、lambda方式

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

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

四、類函數(shù)指針方式

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

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

五、std::bind方式

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

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

六、啟動方式優(yōu)缺點

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

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

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

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

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

七、線程應用場景

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

假設有不同的命令,需要在線程中執(zhí)行,首先實現(xiàn)命令基類

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

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

八、總結

本文主要說明了五種啟動線程的方式,并且說明了其特點,最后舉了一個線程應用的場景。但是,實際使用過程中,需要結合具體的場景來使用對應的線程啟動方式。

  • 函數(shù)指針方式:定義普通函數(shù)
  • 函數(shù)對象方式:重載operator()運算符
  • Lambda函數(shù)方式:匿名函數(shù)
  • 類函數(shù)指針的方式:對象函數(shù)指針
  • std::bind的方式: 實際上也是對象函數(shù)指針

分享文章:基于C++11,介紹啟動線程的五種方式
轉載來于:http://www.5511xx.com/article/cdghggi.html