1. 首先到官网下载

 
 
2. 包含头文件
 
#include "../boost/threadpool.hpp"
 
 
 
3. 声明threadpool对象, 
 
boost::threadpool::fifo_pool m_poolCmdProcess;
 
上面声明了一个FIFO线程池, 即先进先出
 
4. 声明一个Runnable适配类 来包装你的类及成员函数
 
                class Runnable
                {
                                typedef boost::function<void (/*CCommunicationMap*, */ICommandContextEx*)> function;
 
                private:
                                function _f;
                                CCommunicationMap* _target;
                                ICommandContextEx* _data;
 
                public:
                                template<class F>
                                Runnable(CCommunicationMap* target, F f, ICommandContextEx* data)
                                {
                                                _f = f;
                                                _target = target;
                                                _data = data;
                                }
 
                                ~Runnable(){}
 
                                void run()
                                {
                                                //_target->TestCommand(_data);
                                                _f(/*_target, */_data);
                                }
                };
  
 
上面 function 声明了一个函数模板, 此模板应该和你要关联的类成员函数类型一致。
 
5. 调用threadpool的schedule方法 启动线程
 
 
 

boost::function<void (/*CCommunicationMap*, */ICommandContextEx*)>     fun;

                                fun =  boost::bind(&CCommunicationMap::TestCommand, &m_communication, _1);
 
                                Runnable* run = new Runnable(&m_communication,  fun, pContext);
 
                                 boost::threadpool::schedule(m_poolCmdProcess, boost::shared_ptr<Runnable>(run));
 
 
注意: 
threadpool库中的pool_adaptors.hpp头文件有错误, 需要我们改动源码(注释的为原来代码,下面的为改动后的代码), 具体为:
    template<typename Pool, typename Runnable>
    bool schedule(Pool& pool, shared_ptr<Runnable> const & obj)
    {          
                                //return pool->schedule(bind(&Runnable::run, obj));
                                return pool.schedule(bind(&Runnable::run, obj));
    }          

boost::threadpool 调用类成员变量并传入参数 的方法的更多相关文章

  1. boost::function 通过boost::bind调用类成员函数

    1. 首先引用boost::function和boost::bind的头文件和库: #include "boost/bind.hpp" #include "boost/f ...

  2. Qt一个project调用还有一个project的类成员变量

    一句两句话已经不能表达如今的激动情绪了.唯有感叹知识的博大精深,并把感叹转变为文字. 同一个project调用其它类成员变量很easy. 如: 定义 Test1.h中申明成员变量 class A { ...

  3. static 类成员变量 和 static const类成员变量

    1.使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所 ...

  4. Objective-C类成员变量深度剖析

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

  5. c++空指针调用类成员函数

    最近在看C++动态绑定问题时(理解静态绑定时)发现的问题:能用空指针调用类的成员函数(gcc,vs2013下都可以). 例子: class animal { public: void sleep(){ ...

  6. c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用

    c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间.成员 ...

  7. Java中变量之局部变量、本类成员变量、父类成员变量的访问方法

    变量:局部变量.本类成员变量.父类成员变量 如何访问:如果变量名相同,则采用就近原则,哪个变量离所要调用的访问最近,那就么就输出,优先顺序为:局部变量 > 本类成员变量 > 父类成员变量 ...

  8. Objective-C类成员变量深度剖析--oc对象内存模型

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

  9. 编写Java程序,创建Dota游戏中的兵营类,兵营类有一个类成员变量count、一个实例变量name和另一个实例变量selfCount。

    返回本章节 返回作业目录 需求说明: 创建Dota游戏中的兵营类 兵营类有一个类成员变量count.一个实例变量name和另一个实例变量selfCount. count表示的是兵营已经创建士兵的总数: ...

随机推荐

  1. Tinkoff Challenge - Elimination Round B. Igor and his way to work(dfs+优化)

    http://codeforces.com/contest/793/problem/B 题意:一个地图,有起点和终点还有障碍点,求从起点出发到达终点,经过的路径上转弯次数是否能不超过2. 思路: 直接 ...

  2. shell 输入不显示在监视器上

    #!/bin/bash read -s -p "Enter your password:" pass echo "your password is $pass" ...

  3. CSS再学习 之背景色 背景图片

    背景色 p {background-color: gray;} 如果您希望背景色从元素中的文本向外少有延伸,只需增加一些内边距. p {background-color: gray; padding: ...

  4. Java回顾之I/O

    这篇文章主要回顾Java中和I/O操作相关的内容,I/O也是编程语言的一个基础特性,Java中的I/O分为两种类型,一种是顺序读取,一种是随机读取. 我们先来看顺序读取,有两种方式可以进行顺序读取,一 ...

  5. HIVE之常用字符串函数

    可以参考: 博文 : https://www.iteblog.com/archives/1639.html

  6. HDU-5700-贪心/stl

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  7. L173

    Technical problems temporarily blocked some US and European users having access to their accounts an ...

  8. Linux:root下的文件-anaconda-ks.cfg详解

    anaconda-ks.cfg详解 系统安装的时候生成的一个文件,通过这个文件可以修改成自动安装的脚本,用于自动安装同样配置的系统. 自动生成的启动文件anaconda# Kickstart file ...

  9. POJ2728 Desert King 最优比率生成树

    题目 http://poj.org/problem?id=2728 关键词:0/1分数规划,参数搜索,二分法,dinkelbach 参考资料:http://hi.baidu.com/zzningxp/ ...

  10. [BZOJ5330][SDOI2018]反回文串

    luogu bzoj sol 枚举一个长度为\(n\)为回文串,它的所有循环位移都可以产生贡献. 但是这样算重了.重复的地方在于可能多个回文串循环同构,或者可能有的回文串经过小于\(n\)次循环位移后 ...