自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于C++11,介紹啟動(dòng)線程的五種方式

開發(fā) 后端
本文將首先說明啟動(dòng)線程的五種方式,然后再分析五種方式的優(yōu)缺點(diǎn),最后通過一個(gè)示例來說明如何將線程運(yùn)用到實(shí)際的場景中,并總結(jié)五種啟動(dòng)線程的特性。

 

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

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

[[343486]]

 

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

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

三、lambda方式

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

編譯運(yùn)行程序之后,也可以確認(rèn)線程啟動(dòng)的時(shí)候,調(diào)用了lambda函數(shù)。

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

從運(yùn)行結(jié)果看,啟動(dòng)的線程成功調(diào)用了類的成員函數(shù)。

基于C++11,介紹啟動(dòng)線程的五種方式

 

五、std::bind方式

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

編譯成功之后,運(yùn)行程序的結(jié)果如下,這也說明std::bind方式啟動(dòng)線程是可行的。

基于C++11,介紹啟動(dòng)線程的五種方式

 

六、啟動(dòng)方式優(yōu)缺點(diǎn)

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

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

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

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

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

七、線程應(yīng)用場景

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

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

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

基于C++11,介紹啟動(dòng)線程的五種方式

 

八、總結(jié)

本文主要說明了五種啟動(dòng)線程的方式,并且說明了其特點(diǎn),最后舉了一個(gè)線程應(yīng)用的場景。但是,實(shí)際使用過程中,需要結(jié)合具體的場景來使用對應(yīng)的線程啟動(dòng)方式。

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

 

 

 

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2013-05-30 00:49:36

C++11C++條件變量

2013-07-31 11:09:05

C++11

2024-05-29 13:21:21

2020-06-01 21:07:33

C11C++11內(nèi)存

2022-07-27 08:15:31

C 語言Linux

2024-06-20 11:52:44

C#占位符代碼

2023-07-05 07:48:04

線程池join關(guān)閉狀態(tài)

2013-12-23 09:48:43

C++鎖定模式

2024-02-21 23:43:11

C++11C++開發(fā)

2013-09-25 14:20:46

2024-09-13 08:27:00

2020-12-09 10:55:25

ArrayvectorLinux

2021-06-11 10:53:40

Folly組件開發(fā)

2009-08-25 15:09:30

C#線程的啟動(dòng)

2010-08-27 09:10:15

網(wǎng)絡(luò)隱私

2011-02-28 13:51:30

Spring事物配置

2009-06-19 18:26:38

Spring事務(wù)配置

2024-04-24 11:24:43

C#數(shù)據(jù)去重

2011-11-25 10:25:27

SpringJava

2011-10-13 10:21:01

C++
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號