`
amornio19840908
  • 浏览: 56813 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++ boost thread学习(二)

    博客分类:
  • C++
阅读更多
线程中断

在一个线程对象上调用 interrupt() 会中断相应的线程,并会在这个线程中抛出一个类型为 boost::thread_interrupted 的异常。

如果给定的线程不包含任何中断点,简单调用interrupt就不会起作用。 每当一个线程中断点,它就会检查interrupt是否被调用过。只有被调用过了, boost::thread_interrupted 异常才会相应地抛出。

Boost.Thread定义了一系列的中断点,例如sleep() 函数,由于sleep() 在这个例子里被调用了五次,该线程就检查了五次它是否应该被中断。然而sleep()之间的调用,却不能使线程中断。

一旦该程序被执行,它只会打印三个标准输出流。这是由于在main里3秒后调用 interrupt()方法。 因此,相应的线程被中断,并抛出一个 boost::thread_interrupted 异常。这个异常在线程内也被正确地捕获,catch 处理是空的。

Boost.Thread定义包括上述 sleep()函数等十个中断。 有了这些中断点,线程可以很容易及时中断。然而,他们并不总是最佳的选择,因为中断点必须事前读入以检查 boost::thread_interrupted 异常。

#include <boost/thread.hpp>
#include <boost/thread/mutex.hpp>

#include <iostream>

boost::mutex io_mutex;

using namespace std;

void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}

void interruptedThread()
{
	try
	{
		for (int i = 0; i < 5; i++)
		{
			wait(1);
			cout << i << endl;
		}
	}
	catch (boost::thread_interrupted&)
	{
		cout << "thread_interrupted exception happened";
	}
}

void testInteruptedThread()
{
	boost::thread t(interruptedThread);
	wait(3);
	t.interrupt();
	t.join();
}

int main(int argc, char* argv[])
{
	testInteruptedThread();
	return 0;
}

分享到:
评论

相关推荐

    C++ Boost Thread 编程指南

    ### C++ Boost Thread 编程指南精要解析 #### 前言:多线程编程在C++中的挑战与机遇 随着互联网应用、事务服务器以及图形用户界面(GUI)应用程序等现代软件系统的复杂性增加,多线程编程已成为提高程序性能和响应...

    C++ Boost Thread 编程

    #### 二、Boost Thread 库的历史背景 几年前,多线程编程在软件开发中还是相对较少使用的高级特性。但随着互联网服务的发展,多线程技术已成为提升程序性能和响应性的关键手段。例如: - **互联网应用**:为了提高与...

    C++ Boost 库中文文档

    **Boost库中文文档**对于中国开发者来说是一份非常宝贵的资源,它帮助开发者理解和使用Boost库的各种组件,降低学习曲线,提高开发效率。文档通常包含了详细的功能介绍、使用示例和API参考,使得开发者能够快速掌握...

    C++ Boost Thread 编程指南.doc

    C++ Boost Thread 编程指南.doc

    BOOST学习资料整理收集

    1. **Boost.And.STL学习资料**:这是一份关于如何结合使用Boost库和STL(Standard Template Library,标准模板库)的资源,两者都是C++编程中的重要工具,结合使用可以提高代码效率和可读性。 2. **An.Introduction....

    c++boost库最新版本

    1. **多线程支持**:Boost.Thread库提供了C++标准库中尚未包含的多线程编程接口,包括线程的创建、同步、线程局部存储等功能,有助于开发者编写高效的并发程序。 2. **智能指针**:Boost库中的smart_ptr系列(例如...

    boost中文手册C++

    6. 线程管理:Boost.Thread库提供了C++标准库中没有的线程管理功能,如条件变量、线程池、异步调用等,使得在C++中编写多线程程序变得更加容易。 7. 日期时间处理:Boost.DateTime库提供了日期、时间和时间间隔的...

    C++BOOST中文帮助文档.zip

    "C++BOOST中文帮助文档.zip"是一个压缩包,其中包含了一份Boost库的中文帮助文档,对于学习和使用Boost库的中文用户来说,这是一个非常宝贵的资源。 Boost库中的主要组件包括但不限于以下几个方面: 1. **智能指针...

    c++ boost 开发参考手册

    最近开发中用到大量BOOST库的东西,现在把我开发中总结的boost使用方法分享一下,里面包括智能指针、boost定时器、boostthread和io_service等的用法和说明,还有一本Beyond the C++ Standard Library: An ...

    C++库 boost-1-83版本

    8. **序列化**:Boost.Serialization库可以将C++对象序列化为XML、二进制文件或网络流,方便数据持久化和传输。 9. **数学和统计**:Boost.Math库包含了广泛的数学函数,如高精度计算、特殊函数和统计学相关工具。 ...

    C++ Boost manual

    1.47版本的《C++ Boost手册》是开发者学习和使用Boost库的重要资源,它详细解释了每个库的用法、示例和注意事项,是提升C++编程技能不可或缺的参考书目。通过深入理解和熟练运用Boost库,开发者可以写出更高效、更...

    C++11/14高级编程 Boost程序库探秘 中文版 第三版 高清完整

    通过学习这本书,读者不仅可以掌握C++11和C++14的现代编程技巧,还能深入了解Boost库的应用,提高编程效率,编写出更高效、更可靠的软件。无论是对C++初学者还是经验丰富的开发者来说,都是一本不可多得的参考书籍。

    C++准标准库Boost介绍

    **C++历史与Boost** C++起源于1979年,由Bjarne Stroustrup在C语言的基础上增加了类的概念,逐步发展成一种支持数据抽象、面向对象编程和泛型编程的通用编程语言。随着时间的推移,C++经历了多次重要的标准化进程,...

    C++_Boost_Thread_编程指南

    C++ Boost Thread编程指南是关于如何在C++中利用Boost库进行多...最后,参考资料部分提供了更多深入学习Boost.Thread和其他相关技术的资源,帮助程序员更好地理解和利用这个强大的库来编写高效、可靠的多线程C++程序。

    C++使用的boost库

    Boost.Thread库提供了多线程编程的支持,包括线程创建、同步机制(如互斥量、条件变量)和线程安全的容器。这使得开发者能够轻松地在C++中实现并发和并行程序。 3. **算法**: Boost库包含了丰富的算法库,如`...

    C++参考手册中文版chm以及Boost库中文版chm

    通过C++参考手册和Boost库中文版的学习,开发者可以深入理解C++的各个方面,从而编写出高效、可靠且易于维护的代码。这两个资源对于初学者和经验丰富的程序员都是宝贵的参考资料,能够提升编程技能和解决问题的能力...

    The boost c++ libraries PDF

    综上所述,Boost C++ Libraries不仅是一组强大的工具集,也为C++开发者提供了广阔的学习和发展空间。通过学习和应用Boost库,开发者可以提高自己的编程技能,同时也能为项目带来更高的生产力和效率。随着未来C++标准...

    boost—thread教程

    首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0& threadfunc): boost::function0可以...

    C++Boost库完全开发指南_深入Cpp准标准库_带目.录zip

    Boost.Thread库则为C++提供了线程管理和同步原语,部分功能在C++11的std::thread和std::mutex等中得到了标准化。Boost.Bind和Boost.Lambda则为函数对象和函数绑定提供了支持,这在C++11的lambda表达式中得到了更简洁...

Global site tag (gtag.js) - Google Analytics