boost线程中断
来源:互联网 发布:mac其他文件怎么清理 编辑:程序博客网 时间:2024/06/03 17:06
/**模拟功能:线程中断 boost::this_thread::interruption_point()一个对话框应用程序,界面上有两个按钮,一个是“开始”一个是“退出”,点击“开始”时创建一个线程,这个线程会执行一个任务,whatever,可能是下载一个大文件吧,然后在下载过程中需要在窗口上实时刷新当前进度。而在下载过程中“退出”按钮随时可能被点击,这时要求要先退出线程,再退出应用程序。*/#include "stdafx.h"#include <windows.h>#include <boost/thread.hpp>#include <boost/bind.hpp>using namespace std;using std::tr1::shared_ptr;class Downloader{public:Downloader() : m_percent(0) {}void start(){m_thread.reset(new boost::thread(boost::bind(&Downloader::download, this)));//m_thread->detach();此处不要detach 否则线程不可控 无法中断}void stop(){m_thread->interrupt();}int get_percent() { return m_percent; }private:void download(){try{while (m_percent < 100){// 这是个中断点boost::this_thread::interruption_point();++m_percent; // 模拟下载过程,加到100算结束// 这里也是中断点boost::this_thread::sleep(boost::posix_time::seconds(1));cout << "Percent is " << m_percent << endl;}}catch (boost::thread_interrupted& /*e*/){//捕获中断点抛出异常// 加上try-catchcout << "thread interrupted " << endl;}}shared_ptr<boost::thread> m_thread; // 下载进程int m_percent; // 下载百分比};int _tmain(int argc, _TCHAR* argv[]){cout << "要开始下载文件吗?" << endl;char ch;if (cin >> ch && ch == 'y'){Downloader d;d.start();cout << "已经开始下载" << endl;cout << "要停止吗?" << endl;if (cin >> ch && ch == 'y'){d.stop();}cout << "已经下载了%" << d.get_percent() << endl;Sleep(10000);}return 0;}
0 0
- boost线程中断
- boost::thread编程-线程中断
- boost::thread编程-线程中断
- boost线程库学习--(3)线程中断
- 【Boost】boost库中thread多线程详解5——谈谈线程中断
- 【Boost】boost库中thread多线程详解5——谈谈线程中断
- 【Boost】boost库中thread多线程详解11——线程的休眠和中断
- 【Boost】boost库中thread多线程详解5——谈谈线程中断
- boost线程
- boost线程
- Boost 线程
- 线程中断
- 中断线程
- 中断线程
- 中断线程
- 中断线程
- 线程中断
- 中断线程
- 算法导论 思考题 8-4
- struts2、spring4、hibernate4(ssh)整合案例
- JSP页面<%@ ...%>是什么意思?
- 从Windows命令行打开共享文件夹
- ubuntu下PyCharm导入ros库
- boost线程中断
- git的常用命令
- MagicIndicator
- mysql与oracle的分页语句
- 堆排序-教训啊
- 题目:有一分数数列,2/1,3/2,5/3,8/5,13/8,21/13,,求出这个数列的前20项之和。
- Unity3D Vuforia 脱卡时遇到问题
- simulik中的液压建模Simscape_Fluids资料收集及学习(原SimHydraulics)
- (原创)介绍一个优秀的图片压缩库Compressor