boost创建线程池_linux下boost的一个扩展线程池-threadpool-的学习
安装boost:
http://www.boost.org/下载boost,我下下来是boost_1_51_0.
boost库的大部分都可以直接引用头文件就行了,因为大多数都是头文件里模板加inline函数构成。但是也有些是需要安装成二进制lib的,比如thread.(详见文档:"Getting Started...")
$ cd boost_1_51_0
$ sudo ./bootstrap.sh //这条命令类似./configure. 也可以./bootstrap.sh --help看看有哪些命令参数.
$ sudo ./b2 install //这样,boost库的所有头文件和需要编译的lib都安装到/usr/local/lib 和 /usr/local/include了。(头文件在boost文件夹里.)
boost扩展工具-线程池(threadpool):
http://threadpool.sourceforge.net/下载threadpool,然后把threadpool里面的boost目录下的threadpool.hpp和threadpool文件夹拷贝到/usr/local/include/boost/下(如果有权限问题还得cd /usr/local/include/boost && sudo chmod -R 777 *).
使用threadpool需要链接boost的两个共享库:boost_thread、boost_system(如果是静态链接那就还得动态链接pthread库), 并且include 。(详见文档: "Installing & Using threadpool")
在使用threadpool时,编译会报错:
task_adaptors.hpp:149:28: error: ‘TIME_UTC’ was not declared in this scope。。。
这是因为boost::TIME_UTC has been renamed to boost::TIME_UTC_ in Boost 1.50。修改task_adaptors.hpp自不必说.
http://blog.csdn.net/byxdaz/article/details/6299020
代码:
callback_task.hpp:
/*
* @file callback_task.hpp
* @brief add callback task for threadpool.
*/
#ifndef __callback_task_h__
#define __callback_task_h__
#include
namespace boost { namespace threadpool
{
template
class callback_task
{
typedef boost::function CALLBACK;
typedef boost::function FUNCTION;
private:
CALLBACK m_Callback;
FUNCTION m_Function;
public:
callback_task(FUNCTION f, CALLBACK c):m_Callback(c), m_Function(f){}
void operator()(){ m_Callback(m_Function()); }
};
}} // namespace boost::threadpoll
#endif // __callback_task_h__
main.cpp:
#include
#include
#include
#include "callback_task.hpp"
using namespace std;
using namespace boost::threadpool;
void task_normal()
{
cout << "task_normal()\n";
}
void task_with_parameter(int value, string str)
{
cout << "task_with_parameter(" << value << ", " << str << ")\n";
}
bool task_loop()
{
static int i = 0;
cout << "task_loop:" << i <
return ++i != 5;
}
int task_return14()
{
sleep(1);
return 14;
}
void callback(int ret)
{
cout<< "callback: task_return14() return " << ret << "\n";
}
void task_test4ThreadPrivateData()
{
cout << "task_test4ThreadPrivateData().id:";
static map<:thread::id string> s_ThreadPrivateData;
boost::thread::id tid = boost::this_thread::get_id();
cout << tid << "\n";
map<:thread::id string>::iterator it;
if((it = s_ThreadPrivateData.find(tid)) == s_ThreadPrivateData.end())
{
it = s_ThreadPrivateData.insert(make_pair(tid, "hello")).first;
}
cout << tid << " has private data:" << it->second << "\n";
}
void help2SeePoolStatus(pool & tp)
{
ostringstream os;
os << "begin>\n";
os << "how many threads in the pool:" << tp.size() << "\n";
os << "how many tasks are currently executed:" << tp.active() << "\n";
os << "how many tasks are ready and waiting for execution:" << tp.pending() << "\n";
os << "
cout<< "\033[1;45;33m"<< os.str() << "\033[0m" << "\n";
}
void help2AddAllTask(pool & tp)
{
tp.schedule( callback_task(&task_return14, callback) );
tp.schedule(&task_normal);
tp.schedule(boost::bind(task_with_parameter, 4, "number"));
tp.schedule( looped_task_func(&task_loop, 0.5*1000) );
tp.schedule(&task_test4ThreadPrivateData);
}
void testCase0()
{
cout<< "testCase0()\n" << endl;
// Create fifo thread pool container with n threads.
pool tp(0);// 0 threads in pool
help2AddAllTask(tp);
help2SeePoolStatus(tp);
//Wait until all task are finished.
tp.wait();
}
void testCase1()
{
cout<< "testCase1()\n" << endl;
pool tp(1);// only one thread in pool.
help2AddAllTask(tp);
help2SeePoolStatus(tp);
tp.size_controller().resize(5);
help2SeePoolStatus(tp);
tp.wait();
help2SeePoolStatus(tp);
}
void testCase2()
{
cout<< "testCase2()\n" << endl;
pool tp(10);
help2AddAllTask(tp);
for(int i = 0; i != 4; i++, help2SeePoolStatus(tp), sleep(.5));
tp.wait();
}
int main(int argc,char *argv[])
{
testCase1();
return(0);
}
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(test)
SET(CMAKE_C_COMPILER "g++")
SET(SRC_LIST main.cpp)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} boost_thread boost_system)
boost创建线程池_linux下boost的一个扩展线程池-threadpool-的学习相关推荐
- linux下boost的一个扩展线程池-threadpool-的学习
转自:http://www.cnblogs.com/xiaouisme/archive/2012/10/04/2711691.html 安装boost: http://www.boost.org/下载 ...
- java 线程释放_如何手动释放一个java线程占用的资源
我做一个聊天软件我双击一个好友头像时执行一个线程弹出一个窗口线程里run方法是用来接收信息的,但是当我把当前窗口关掉想再一次打开时,却提示端口被占用我找到了地方是上一个窗口弹... 我做一个聊天软件 ...
- linux 在本地创建svn服务器_linux下搭建svn服务器及创建项目
一. 使用yum 安装SVN包 关于YUM 服务器的配置参考: Linux 搭建 YUM 服务器 http://blog.csdn.net/tianlesoftware/archive/2011/01 ...
- linux怎么创建python文件_Linux下创建python脚本并运行(入门)
1.首先定位到一个文件夹,然后使用vim编辑器:vim test.py 就创建了python脚本文件,并且进入编辑状态 2.编辑好之后按Esc切换到命令模式,然后输入:wq 回车就自动保存完成了,然后 ...
- c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...
在上一章我们已经说明了uart驱动的开发流程,本章我们就不再介绍uart相关的接口实现,仅通过实现一个虚拟的串口控制器程序,用以说明虚拟串口的开发流程. 本次开发的虚拟串口提供的功能如下: 提供两个串 ...
- [C++][线程安全]单例模式下双检查锁和线程
问题 在设计模式中,有一个很经典的模式-单例模式,它可能是实现上最简单的模式,在代码中也经常使用,在单线程下,毫无疑问延迟化加载是比较常用的,但是在多线程条件下,单例模式的延迟加载可能就会出现一些问题 ...
- linux中如何复制文件并重命名_linux 下怎么复制一个文件到另外一个目录并且重命名...
在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...
- linux安装pdo mysql扩展_linux下php安装pdo_mysql扩展
1.确定php环境已经配置好,找到php安装包的pdo_mysql扩展目录,假设你的安装包放在/lamp/php-5.2.6下. [root@localhost /]# cd /lamp/php-5. ...
- linux php添加mysql扩展模块_linux下为php添加扩展库的方法
本节内容: linux下添加php扩展库 这里以php curl 扩展库编译为例. 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译, ...
- linux删除del后缀文件,linux删除命令_linux下如何删除一个文件?
关于linux的删除命令 先登录linux服务器. linux下的删除命令是 del吗 不是del.是rm:remove 移除的意思.rm的用法如下: 1.删除文件夹以及文件夹中的所有文件命令: rm ...
最新文章
- Android XML使用的学习记录
- python 链表中倒数第k个节点
- 北哥大话Yii2缓存机制 - File缓存
- VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
- 机器学习(三十八)——博弈论(1)
- 民用建筑工程给水排水设计深度图样_河南省怎样办理市政设计给水排水工程设计乙级资质...
- MySQL日志审计 帮你揪出内个干坏事儿的小子
- python 2.7 input_Python2.7-fileinput
- 安装Go 1.9.2
- centos6.6安全设置
- 2018春江苏省计算机等级考试,2018年春季江苏省计算机等级考试报名通知
- 企业如何选择最佳的SSL
- 图像相似度对比分析软件,图像相似度对比分析法
- pb 修改数据窗口种指定字段位置_PB数据窗口对象之字段操作
- 批量给 Word、PPT 和 PDF 插入封面或新的页面
- 华为大数据研发第2轮面试
- 【哈佛大学:计算生物学 生物信息学】学习记录(二)
- linux命令的全称,linux命令的全称~~~·
- 花式索引与np.ix_函数
- iOS开发 关于调用私有函数 监测安装app 卸载 app