1.线程管理

最重要的一个类是boost::thread,是在boost/thread.hpp里定义的,用来创建一个新线程。

#include <boost/thread.hpp>
#include <iostream> void wait(int seconds) {
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
} void thread() {
for (int i = ; i < ; ++i) {
wait();
std::cout << i << std::endl;
}
} int main() {
boost::thread t(thread);
t.join();
return ;
}

上述执行函数的名称被传递到boost::thread的构造函数,一旦变量t被创建,该thread()函数在其所在线程中被立即执行。join()方法是一个阻塞调用:可以暂停当前线程,直到调用join()的线程结束与你想那个。这会使得main()函数一直会等待到thread()运行结束。

一个特定的线程可以通过thread变量访问,通过这个变量等待着它的使用join()方法终止,但即使该变量被析构,该线程也将继续运行。

#include <boost/thread.hpp>
#include <iostream> void wait(int seconds) {
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
} void thread() {
try {
for (int i = ; i < ; ++i) {
wait();
std::cout << i << std::endl;
}
} catch (boost::thread_interrupted&) {
}
} int main() {
boost::thread t(thread);
wait();
t.interrupt();
t.join();
return ;
}

在一个线程对象上调用interrupt()会中断相应的线程。中断意味着一个类型为boost::thread_interrupted的异常,会在这个线程中抛出,只有在线程达到中断点时才会发生。如果给定的线程不包含任何中断点,简单调用interrupt()就不会起作用。每当一个线程中断点,它就会检查interrupt()是否被调用过。只有被调用过了,boost::thread_interrupted异常才会相应的抛出。sleep()函数为一个程序中断点。

2. 同步

boost库:多线程的更多相关文章

  1. (十二)boost库之多线程高级特性

    (十二)boost库之多线程高级特性 很多时候,线程不仅仅是执行一些耗时操作,可能我们还需要得到线程的返回值,一般的处理方法就是定义一个全局状态变量,不断轮训状态,就如我目前维护的一个项目,全局变量定 ...

  2. (十一)boost库之多线程间通信

    (十一)boost库之多线程间通信 1.互斥锁 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一 ...

  3. (十)boost库之多线程

    (十)boost库之多线程 1.创建线程 使用boost库可以方便的创建一个线程,并提供最多支持9个参数的线程函数,相对于void*来说,方便了很多,创建线程主要提供了一下3种方式: 线程库头文件:# ...

  4. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  5. boost库(条件变量)

    1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线 ...

  6. boost库在windows下的编译和使用

    因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...

  7. Boost库

    2014-08-31 Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成 ...

  8. boost库在工作(39)网络UDP异步服务端之九

    前面创建的UDP服务器和客户端,都是同步的方式,也就是说当接收数据时,不能参与别的事情执行的.如果在一个只有界面线程的程序里,又不想创建多线程,导致复杂程度的增加,在这种情况之下,我们还有一个方案可以 ...

  9. (七)boost库之单例类

    (七)boost库之单例类 一.boost.serialzation的单件实现 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一 ...

  10. Boost库学习之旅入门篇

    学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了.但boost功能太多,每次使用还是得翻看以前的 资料,所以为了以后可以更方便的使 ...

随机推荐

  1. UML-六大关系

    六大关系 依赖关系:(只要是在类中使用到了对方就存在依赖关系) 泛化关系:就是继承关系,即依赖关系的特例 实现关系:依赖关系的特例 关联关系:类于类之间的关系,即依赖关系的特例(具有导航性:双向关系或 ...

  2. LG1440 求 m 区间内的最小值

    题目描述 一个含有 \(n\) 项的数列 (\(n≤ 2000000\)),求出每一项前的 \(m\) 个数到它这个区间内的最小值.若前面的数不足 \(m\) 项则从第 \(1\) 个数开始,若前面没 ...

  3. SelfCert wcf中 生成x5.09证书的工具

    http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programma ...

  4. Map-Amap:自定义地图

    ylbtech-Map-Amap:自定义地图 1.返回顶部 1. http://lbs.amap.com/getting-started/mapstyle 2. 2.返回顶部 1. 自定义地图,地图从 ...

  5. 20150709---Web中GridView控件根据绑定的数据显示不同的图片

    示例图: 根据数据判断,显示各种不同的图片 该列的前端代码: <asp:TemplateField HeaderText="审图"> <ItemTemplate& ...

  6. 测开之路三十二:Flask基础之错误与重定向

    错误处理,框架默认的错误为:not Found 可以捕获,并自定义 准备一张自定义图片,放在static文件夹下,并在template下创建一个html文件,引用该图片 捕获404状态,返回自定义页面 ...

  7. 18. Jmeter-取样器二

    jmeter-sampler介绍与使用 JMS Point-to-Point JMS Publisher JMS Subscriber JSR223 Sampler JUnit Request Jav ...

  8. VLAN基础配置及Access接口

    一.实验目的 二.实验拓扑图 三.实验编址 四.实验步骤 1.基础配置 按照PC1的方式依次配好IP 打开所有设备 用ping命令测试连通性 更改主机名称 2.创建VLAN 在S1上使用两条命令创建V ...

  9. static_cast关键字 dynamic_cast关键字

    前言 说起C++中的继承.多态.虚函数等概念,可能很多同学都有所了解,但是要说真正熟知的同学可能就不是很多了.最近在编程过程中了解到C++类型的层次转换(这就涉及到了多态和继承的相关概率),通常C语言 ...

  10. sql优化 分字段统计查询

    select count(1) from pd_xxx_origin_xxx_data where create_time like '2019-02-23%' and source='20036' ...