一、基本使用頭文件 <boost/thread/thread.hpp>
?
1、threadthread的構(gòu)造形式為explicit thread(const boost::function0<void>&);如果你對(duì)boost::function不熟,那么我聽我簡(jiǎn)短的介紹一下:boost::function0<void>可以簡(jiǎn)單看為:一個(gè)無返回(返回void),無參數(shù)的函數(shù)。這里的函數(shù)也可以是類重載operator()構(gòu)成的函數(shù)。
舉例來說如下形都可以轉(zhuǎn)化為function0<void>。
只要帶參數(shù)構(gòu)造一個(gè)thread實(shí)例那么就是構(gòu)建了一個(gè)線程,相當(dāng)?shù)姆奖憧旖荨?br />于是有了我們第一個(gè)例子:例一:
運(yùn)行后發(fā)生了什么?線程起動(dòng)了,但一閃而過,結(jié)果都沒能輸出全就運(yùn)行結(jié)束了。那該怎么辦呢?答:使用thread::join,當(dāng)join后的thread在該線程未執(zhí)行結(jié)束會(huì)一直處于阻塞狀態(tài)。
改下例子中主程序main為
看到結(jié)果了,但似乎線程有點(diǎn)不同步,呃。。暫時(shí)放在一旁吧。什么?你覺得void(void)的函數(shù)連變量入口都沒,傳值不方便?其實(shí)你錯(cuò)了,當(dāng)你用會(huì)了boost::bind,會(huì)發(fā)現(xiàn)函數(shù)有多少參數(shù)都不是問題,都可以輕松bind為void(void)形式。我?guī)缀蹩梢哉fboost::thread最基本的的使用就是boost::thread+boost::function+boost::bind的結(jié)合。
2、thread_group大家一定注意到除了thread還有thread_group,顧名思義,thread_group就是thread的group,看看main主程序有點(diǎn)煩瑣,引入thread_group看看效果先認(rèn)識(shí)下thread_group的成員函數(shù):
很清晰,改造開始
運(yùn)行,結(jié)果完全一樣。
注意:當(dāng)thread_group析構(gòu)時(shí)會(huì)自動(dòng)delete已加入的thread例
若要手動(dòng)管理,可改為:
好了,