您的位置:首页 > 其它

boost::threadpool 调用类成员变量并传入参数 的方法

2013-07-10 15:41 344 查看
1. 首先到官网下载
http://threadpool.sourceforge.net/
2. 包含头文件
[align=left]#include "../boost/threadpool.hpp"[/align][align=left]
[/align][align=left]
[/align][align=left]
[/align][align=left]3. 声明threadpool对象, [/align][align=left]
[/align][align=left]boost::threadpool::fifo_pool m_poolCmdProcess;[/align][align=left]
[/align][align=left]上面声明了一个FIFO线程池, 即先进先出[/align][align=left]
[/align][align=left]4. 声明一个Runnable适配类 来包装你的类及成员函数[/align][align=left]
[/align][align=left] class Runnable[/align][align=left] {[/align][align=left] typedef boost::function<void (/*CCommunicationMap*, */ICommandContextEx*)> function;[/align][align=left]
[/align][align=left] private:[/align][align=left] function _f;[/align][align=left] CCommunicationMap* _target;[/align][align=left] ICommandContextEx* _data;[/align][align=left]
[/align][align=left] public:[/align][align=left] template<class F>[/align][align=left] Runnable(CCommunicationMap* target, F f, ICommandContextEx* data)[/align][align=left] {[/align][align=left] _f = f;[/align][align=left] _target = target;[/align][align=left] _data = data;[/align][align=left] }[/align][align=left]
[/align][align=left] ~Runnable(){}[/align][align=left]
[/align][align=left] void run()[/align][align=left] {[/align][align=left] //_target->TestCommand(_data);[/align][align=left] _f(/*_target, */_data);[/align][align=left] }[/align][align=left] };[/align][align=left] [/align][align=left]
[/align][align=left]上面 function 声明了一个函数模板, 此模板应该和你要关联的类成员函数类型一致。[/align][align=left]
[/align][align=left]5. 调用threadpool的schedule方法 启动线程[/align][align=left]
[/align][align=left]
[/align][align=left]
[/align] boost::function<void (/*CCommunicationMap*, */ICommandContextEx*)> fun;[align=left] fun = boost::bind(&CCommunicationMap::TestCommand, &m_communication, _1);[/align][align=left]
[/align][align=left] Runnable* run = new Runnable(&m_communication, fun, pContext);[/align][align=left]
[/align][align=left] boost::threadpool::schedule(m_poolCmdProcess, boost::shared_ptr<Runnable>(run));[/align][align=left]
[/align][align=left]
[/align][align=left]注意: [/align][align=left]threadpool库中的pool_adaptors.hpp头文件有错误, 需要我们改动源码(注释的为原来代码,下面的为改动后的代码), 具体为:[/align][align=left] template<typename Pool, typename Runnable>[/align][align=left] bool schedule(Pool& pool, shared_ptr<Runnable> const & obj)[/align][align=left] { [/align][align=left] //return pool->schedule(bind(&Runnable::run, obj));[/align][align=left] return pool.schedule(bind(&Runnable::run, obj));[/align][align=left] } [/align][align=left]
[/align][align=left]
[/align]本文出自 “木子纵横” 博客,请务必保留此出处http://muzizongheng.blog.51cto.com/856912/1333069
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐