• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ::^喬喬^::明鏡臺::原創空間::C#.NET2.0,C++技術BLOG
            人最重要的是心境,一顆平靜安穩的心才能更好的進步,保持自己的心態.成為夢想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0

            一、基本使用
            頭文件 <boost/thread/thread.hpp>

            namespace ?boost? {
            ??
            class ?thread;
            ??
            class ?thread_group;
            }

            ?

            1、thread
            thread的構造形式為explicit thread(const boost::function0<void>&);
            如果你對boost::function不熟,那么我聽我簡短的介紹一下:
            boost::function0<void>可以簡單看為:一個無返回(返回void),無參數的函數。
            這里的函數也可以是類重載operator()構成的函數。

            舉例來說如下形都可以轉化為function0<void>。

            1 void ?run( void )
            2 {
            3 }

            4
            5 struct ?Run
            6 {
            7 ???? void ? operator ()( void )? {}
            8 }
            ;
            9

            ?

            只要帶參數構造一個thread實例那么就是構建了一個線程,相當的方便快捷。
            于是有了我們第一個例子:
            例一:

            ?1 #include? < boost / thread.hpp >
            ?2 #include? < iostream >
            ?3
            ?4 struct ?Run
            ?5 ???? {
            ?6 ???? void ? operator ()( void )
            ?7 ???????? {
            ?8 ????
            ?9 ????????std::cout << __FUNCTION__ << std::endl;
            10 ????????}

            11 ????}
            ;
            12 void ?run( void )
            13 ???? {
            14 ????std::cout << __FUNCTION__ << std::endl;
            15 ????}

            16
            17 int ?main( int ?argc,? char * ?argv[])
            18 ???? {
            19 ????Run?r;
            20 ????boost::thread?thrd(r);
            21 ????boost::thread?thrdb(run);
            22 ???? return ? 0 ;
            23 ????}

            24
            25

            ?

            運行后發生了什么?線程起動了,但一閃而過,結果都沒能輸出全就運行結束了。

            那該怎么辦呢?
            答:使用thread::join,當join后的thread在該線程未執行結束會一直處于阻塞狀態。

            改下例子中主程序main為

            1 ???? {
            2 ????Run?r;
            3 ????boost::thread?thrd(r);
            4 ????boost::thread?thrdb(run);
            5 ????thrd.join();
            6 ????thrdb.join();
            7 ???? return ? 0 ;
            8 ????}


            看到結果了,但似乎線程有點不同步,呃。。暫時放在一旁吧。
            什么?你覺得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的成員函數:

            ?

            1 thread * ?create_thread( const ?boost::function0 < void >& );? // 創建一個線程
            2 void ?add_thread(thread * );? // 加入一個已存在的線程
            3 void ?remove_thread(thread * );? // 移除一個線程
            4 void ?join_all();? // 全部等待結束

            ?

            很清晰,改造開始

            1 ???? {
            2 ????Run?r;
            3 ????boost::thread_group?grp;
            4 ????grp.create_thread(r);? // 使用create_thread
            5 ????grp.add_thread( new ?boost::thread(run));? // 使用add_thread
            6 ????grp.join_all();
            7 ???? return ? 0 ;
            8 ????}


            運行,結果完全一樣。

            注意:當thread_group析構時會自動delete已加入的thread

            1 ???? {
            2 ????boost::thread_group?grp;
            3 ????boost::thread * ?thrd = grp.create_thread(r);
            4 ????grp.join_all();
            5 ????delete?thrd;
            6 ????}
            ? // 錯誤,?grp在析構時對已刪除的thrd再進行刪除

            ?

            若要手動管理,可改為:

            1 ???? {
            2 ????Run?r;
            3 ????boost::thread_group?grp;
            4 ????boost::thread * ?thrd = grp.create_thread(r);
            5 ????grp.join_all();
            6 ????grp.remove_thread(thrd);? // 把thrd移出grp
            7 ????delete?thrd;
            8 ???? return ? 0 ;
            9 ????}

            ?

            好了,

            posted on 2009-05-09 19:13 ^喬喬^ 閱讀(1889) 評論(0)  編輯 收藏 引用
            色狠狠久久综合网| 久久国产热精品波多野结衣AV| 婷婷久久久亚洲欧洲日产国码AV| 久久久久青草线蕉综合超碰| 新狼窝色AV性久久久久久| 久久久婷婷五月亚洲97号色 | 中文字幕无码久久人妻| 久久天天婷婷五月俺也去| 亚洲精品无码久久久久久| 午夜天堂av天堂久久久| 女人香蕉久久**毛片精品| 久久丝袜精品中文字幕| 久久天天躁夜夜躁狠狠躁2022| 久久艹国产| 99久久婷婷免费国产综合精品| 久久香蕉国产线看观看猫咪?v| 亚洲精品乱码久久久久久蜜桃不卡 | 香蕉久久夜色精品国产小说| 99久久国产综合精品成人影院| www.久久热.com| 久久久久亚洲精品天堂| 久久人人爽人人爽人人AV东京热| 亚洲综合久久夜AV | 性欧美大战久久久久久久 | 国产成人久久777777| 亚洲综合精品香蕉久久网97 | 亚洲精品乱码久久久久久蜜桃图片| 精品国产乱码久久久久久人妻| 伊人久久大香线蕉综合影院首页 | 久久精品国产99国产精品亚洲| 亚洲女久久久噜噜噜熟女| 日本欧美久久久久免费播放网 | 久久精品嫩草影院| 91精品国产91久久久久久蜜臀| 国产综合免费精品久久久| 日韩精品无码久久久久久| 99热热久久这里只有精品68| 欧美久久久久久午夜精品| 免费一级做a爰片久久毛片潮| 久久久久久久波多野结衣高潮| 男女久久久国产一区二区三区 |