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