• <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 點點滴滴 閱讀(860) 評論(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));

            執行效率:

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

            久久九九免费高清视频 | 国产精品免费久久| 青青青青久久精品国产| 99久久精品国产一区二区| 久久亚洲精品无码观看不卡| 国内精品伊人久久久久妇| 人妻少妇久久中文字幕一区二区| 国产精品久久久久久福利69堂| 久久久久九九精品影院| 午夜不卡久久精品无码免费 | 日韩电影久久久被窝网| 精产国品久久一二三产区区别| 7777久久亚洲中文字幕| 18禁黄久久久AAA片| 91性高湖久久久久| 久久久国产精品亚洲一区| 久久亚洲欧洲国产综合| 久久99精品久久久久久久不卡| 日本精品久久久久久久久免费| 国产成人精品免费久久久久| 国产精品99久久久久久宅男小说| 一本色道久久88加勒比—综合| 亚洲av日韩精品久久久久久a| 精品熟女少妇aⅴ免费久久| 精品久久久久中文字幕日本| 影音先锋女人AV鲁色资源网久久 | 亚洲欧美成人久久综合中文网| 成人久久精品一区二区三区| 亚洲午夜久久久影院| 大香伊人久久精品一区二区| 久久久久18| 亚洲欧美精品一区久久中文字幕| 久久99精品久久久久久不卡| 中文字幕亚洲综合久久| 国产AⅤ精品一区二区三区久久| 精品亚洲综合久久中文字幕| 久久国产免费观看精品| 蜜桃麻豆www久久| 久久五月精品中文字幕| 久久青青色综合| 国产精品久久久久久五月尺|