• <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>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            (搬運工)boost底下的線程池

            Posted on 2012-07-17 16:33 點點滴滴 閱讀(862) 評論(0)  編輯 收藏 引用 所屬分類: 02 編程語言

            Boost的thread庫中目前并沒有提供線程池,我在sorceforge上找了一個用boost編寫的線程池。該線程池和boost結合的比較好,并且提供了多種任務執行策略,使用也非常簡單。

            下載地址:

            http://threadpool.sourceforge.net/

            使用threadpool:

            這個線程池不需要編譯,只要在項目中包含其頭文件就可以了。

            一個簡單的例子:

            #include <iostream>
            #include "threadpool.hpp"

            using namespace std;
            using namespace boost::threadpool;

            // Some example tasks
            void first_task()
            {
            cout << "first task is running\n" ;
            }

            void second_task()
            {
            cout << "second task is running\n" ;
            }

            void task_with_parameter(int value)
            {
            cout << "task_with_parameter(" << value << ")\n";
            }

            int main(int argc,char *argv[])
            {
            // Create fifo thread pool container with two threads.
            pool tp(2);

            // Add some tasks to the pool.
            tp.schedule(&first_task);
            tp.schedule(&second_task);
            tp.schedule(boost::bind(task_with_parameter, 4));

            // Wait until all tasks are finished.
            tp.wait();

            // Now all tasks are finished!
            return(0);
            }

            任務返回值的獲取:

            一般異步調用中,返回值的獲取有同步獲取和異步獲取兩種形式。

            同步獲取返回值:

            int task_int_23()
            {
            cout<<"task_int_23()\n";
            return 23;
            }

            future<int> res = schedule(tp, &task_int_23);
            res.wait();

            cout<<"get res value:"<<res.get()<<endl;

            異步獲取返回值:

            不知道是設計者就不打算使用異步回調獲取返回值還是我看的不夠仔細,異步獲取返回值的方式還真沒有找著,只好自己簡單的寫了一個回調的仿函數來實現異步返回值的獲取。

            //R為任務函數的返回值類型
            template
            <class R>
            class callback_task
            {
            typedef boost::function<void (R)> callback;
            typedef boost::function<R ()> function;

            private:
            callback c_;
            function f_;

            public:
            //F:
            任務執行函數 C:結果回調函數
            template<class F,class C>
            callback_task(F f,C c)
            {
            f_ = f;
            c_ = c;
            }

            void operator()()
            {
            c_(f_());
            }
            };

            通過這個對象可以很容易的實現異步結果的回調。

            //task_int_23的結果回調函數
            void callback(int k)
            {
            cout<<"get callback value:"<<k<<endl;
            }

            //通過回調的形式獲取任務的返回值
            tp.schedule(callback_task<int>(&task_int_23,&callback));

            執行效率:

            這個線程池的效率還沒有怎么測試過,目前還沒有應用到對性能要求比較高的地方,有時間測試一下。

            国产精品免费久久| 久久天天躁狠狠躁夜夜躁2014| 国产精品久久久久久吹潮| 99久久精品免费看国产一区二区三区 | 久久精品国产亚洲αv忘忧草| 久久WWW免费人成一看片| 久久青青草原国产精品免费| 久久不见久久见免费影院www日本| 久久久久久免费视频| 久久精品国产免费| 综合网日日天干夜夜久久| www.久久热.com| 久久久久久久久波多野高潮| 国产成人精品久久亚洲高清不卡| 一本久久知道综合久久| 四虎久久影院| 久久se精品一区二区影院 | 久久WWW免费人成一看片| 久久九九免费高清视频| 久久线看观看精品香蕉国产| 久久久国产打桩机| 合区精品久久久中文字幕一区| 国产成人综合久久精品尤物| 久久精品视频免费| 99久久精品午夜一区二区| 久久久久久精品免费看SSS | 99久久成人18免费网站| 丰满少妇人妻久久久久久| 久久精品人人做人人妻人人玩| 精品国产乱码久久久久久呢| 久久99久久99精品免视看动漫| 香蕉久久夜色精品国产尤物| 婷婷久久综合九色综合九七| 天天影视色香欲综合久久| 四虎影视久久久免费| 老司机午夜网站国内精品久久久久久久久 | 国产成人久久精品一区二区三区| 香蕉久久av一区二区三区 | 国产 亚洲 欧美 另类 久久| 久久电影网2021| 久久久久久国产a免费观看不卡|