boost::thread boost库线程
一.boost::thread的创建
1.线程创建方法一:
boost::shared_ptr<boost::thread> writeThread_;
boost::function0<void> f = boost::bind(&DBTaskMgr::execute, this);
writeThread_ = boost::shared_ptr<boost::thread>(new boost::thread(f));
2.线程创建方法二:
boost::thread myThread(threadFun); //函数无参数,并返回void类型
3.放弃时间片:
boost::thread::yield();
当前线程放弃余下的时间片。
4.等待一个线程:
myThread.join();
注:调用这个方法的线程进入wait状态,直到myThread代表的线程完成为止。如果它不结束的话,join方法就不会返回。join是一个等待子线程结束的最好的方法。
如果主程序不调用join方法而直接结束,它的子线程有可能没有执行完成,但是所有的子线程也随之退出。不调用join方法,主线程就不会等待它的子线程。
二.从一个线程中给另一个线程发送通知
当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/thread/condition.hpp>
#include <boost/thread/mutex.hpp>
boost::shared_ptr<boost::thread> writeThread_;
boost::mutex taskMutex_;
boost::condition_variable taskCond;
bool taskReady = false;
while(true)
{
{
boost::unique_lock<boost::mutex> lock(taskMutex_); //锁定taskMutex_对象
while (!taskReady)
{
taskCond.wait(lock); //解开这个taskMutex_上的锁,然后进行等待或者休眠,直到它的条件得到了满足
}
taskReady = false;
}
...............................................
......
}
void DBTaskMgr::enqueueTask(IDBTask * task)
{
taskQueMutex_.lock();
taskQue_.push_back(task);
taskQueMutex_.unlock();
{
boost::unique_lock<boost::mutex> lock(taskMutex_);
taskReady = true;
}
taskCond.notify_one(); //解除线程等待或休眠
//taskCond.notify_all(); //解开所有线程等待或休眠
}
.....................................
boost::thread boost库线程的更多相关文章
- Boost::thread库的使用
阅读对象 本文假设读者有几下Skills [1]在C++中至少使用过一种多线程开发库,有Mutex和Lock的概念. [2]熟悉C++开发,在开发工具中,能够编译.设置boost::thread库. ...
- Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET
Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET Boost::Thread使用示例 分类: C/C++ 2011-07-06 14:48 5926 ...
- boost::thread用法
最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库.在创建线程时遇到了几种线程创建方式现总结如下: 首先看看boost::thread的构造函数吧,boost::th ...
- 【boost】MFC dll中使用boost thread的问题
项目需要,在MFC dll中使用了boost thread(<boost/thread.hpp>),LoadLibraryEx的时候出现断言错误,去掉thread库引用后断言消失. 百度g ...
- Boost::Thread 多线程的基础知识
Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#incl ...
- boost::thread之while(true)型线程终结方法
我们的程序中经常会用到线程来执行某些异步操作,而有些时候我们的线程执行的函数是这个样子的: void ThreadBody() { while( true ) { std::cout << ...
- 【Boost】boost库asio详解3——io_service作为work pool
无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE.使用io_service作为处理工作的work pool,可以 ...
- Boost的某些库还是需要生成二进制的库的,必须安装才行,以及使用库的方法
头文件就是库使用者最常问的问题就是“我该怎么安装Boost”,这个也是我一开始最关心的问题,Boost这点做的很好,将大部分实现都封装在头文件里,所以对于一些基本的Boost库,其实是不需要安装的,只 ...
- 一个C++基于boost简单实现的线程池
xl_blocking_queue.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
随机推荐
- CentOS环境下yum安装LAMP(Linux+Apache+Mysql+php)
CentOS下使用yum命令 安装LAMP详细过程.我们使用的软件是CentOS的最新版本CentOS 6.3,其他版本的也基本类似. 第一步:更新系统内核(如果不想更新可以跳过本步). 首先更新系统 ...
- arm汇编--ubuntu12.04 安装arm-linux交叉编译环境
1. 安装标准的C开发环境,由于Ubuntu安装默认是不安装的,所以需要先安装一下:sudo apt-get install gcc g++ libgcc1 libg++ make gdb 2.从ft ...
- wxWidgets学习笔记——在屏幕上画简单的图形和文字
在屏幕上画简单图形和显示图片.处理简单鼠标键盘事件 /*************************************************************** * Name: M ...
- 机器学习-review-1 线性回归
发现隔一段时间,忘记了好多知识点,这里认为重要的知识点记录下来,作为笔记,方便以后回顾. From “李航- 统计学习方法” 统计学习方法的三要素: 模型,策略, 算法 对于线性回归 -------- ...
- hdoj 4006 The kth great number【优先队列】
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- Linq中Take、TakeWhile、Skip、SkipWhile的比较(转)
参考文章:http://blog.csdn.net/lxfzgg/article/details/20534281 Take() , , , , , , , , , }; ); //从第一个元素开始, ...
- 6步骤实现CentOS系统环境精简优化
6步骤实现CentOS系统环境精简优化 发布时间:2014-11-03 14:59:27 编辑:AHLinux.com 第一步.删除不必要的自带软件包yum remove Deployment_G ...
- canvas绘制简单小铅笔
对应HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- linux下64位汇编的系统调用系列
http://blog.csdn.net/mydo/article/category/3084893
- 在String中添加移动构造函数和移动赋值运算符
13.50 没有定义析构函数 #include<iostream> #include<string> #include<memory> #include<ut ...