博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boost库在工作(22)任务之二
阅读量:4162 次
发布时间:2019-05-26

本文共 1851 字,大约阅读时间需要 6 分钟。

往往我们开发出来的产品,都是运行在不同的国家,不同的地区,不同生活水平的用户,因而软件产品会运行在不同的环境的电脑里。比如富裕国家里的电脑硬件资源,都比较好,如果还是按低配置电脑的水平设计,显示不会满足用户的要求。但是按高配置要求的硬件资源来设计,行吗?也不行,比如软件安装到工厂这样节约资源的电脑硬件资源里,就会运行不起来,或者说不流畅。因此,在设计软件产品时,需要动态适应电脑运行环境,或者根据电脑当前的情况来运态修改。比如当用户正在操作时,减少后台任务的运行,当用户不操作时,再增加后台任务的运行。这样,就会显著地改变用户对软件的操作体验。软件开发人员想更容易、方便地解决这些问题,可以使用线程池的方式来运行任务队列来解决,当需要减少占用CPU时,就挂起一些线程,当CPU空闲时,就恢复线程的运行。

从前面已经学习过线程池,只需要把线程池添加到任务队列里,就可以实现这个功能了,例子如下:
// boost_015.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include 
#include
#include
#include
#include
void TaskRun(int nVal){ //下面输出需要加锁,不能多个线程共享输出。 static boost::mutex mutexCout; boost::lock_guard
autoLock(mutexCout); std::cout << "TaskRun: " << nVal << std::endl;}//封装线程组运行的类, 并且演示使用类成员函数作为线程组运行函数class CThreadBase{public: CThreadBase(void) :m_Work(m_ioService) { } void Start(int nMaxCount) { //循环地创建N个线程。 for (int i = 0; i < nMaxCount; ++i) { m_threadGroup.create_thread(boost::bind(&CThreadBase::Run, this, i)); } } void Stop(void) { // m_ioService.stop(); //等所有线程退出。 m_threadGroup.join_all(); } //测试任务队列 void TestTask(void) { //放入几个任务。 m_ioService.post(boost::bind(TaskRun, 10)); m_ioService.post(boost::bind(TaskRun, 2)); m_ioService.post(boost::bind(TaskRun, 88)); m_ioService.post(boost::bind(TaskRun, 99)); m_ioService.post(boost::bind(TaskRun, 888)); m_ioService.post(boost::bind(TaskRun, 1314520)); }private: virtual void Run(int nVal) { //运行队列里的任务。 boost::system::error_code errorCode; m_ioService.run(errorCode); }private: //定义一个任务队列。 boost::asio::io_service m_ioService; boost::asio::io_service::work m_Work; //定义一个线程组对象。 boost::thread_group m_threadGroup; };int _tmain(int argc, _TCHAR* argv[]){ // CThreadBase threadBase; //设置最大的线程个数。 threadBase.Start(3); threadBase.TestTask(); Sleep(2000); threadBase.Stop(); system("pause"); return 0;}

转载地址:http://raixi.baihongyu.com/

你可能感兴趣的文章
Multi-Object Tracking with Quadruplet Convolutional Neural Networks
查看>>
关于多目标跟踪的一点理解
查看>>
Learning by tracking:Siamese CNN for robust target association
查看>>
MUSTer:Multi-Store Tracker:A Cognitive Psychology Inspired Approach to Object Tracking
查看>>
Understanding and Diagnosing Visual Tracking Systems
查看>>
Multiple People Tracking by Lifted Multicut and Person Re-identification
查看>>
Visual Tracking Using Attention-Modulated Disintegration and Integration
查看>>
Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning
查看>>
Multiple Object Tracking with High Performance Detection and Appearance Feature
查看>>
深度学习入门(上)-第一章 必备基础知识点
查看>>
ubuntu unzip解压时提示错误 解决方法
查看>>
sprintf函数的说明
查看>>
BOOST_TYPEOF和BOOST_AUTO 作用
查看>>
随机森林概述
查看>>
2011十大战略技术
查看>>
大学应该学的软件知识
查看>>
腾讯与360战争背后的云计算阴影
查看>>
腾讯看了会沉默,360看了会流泪
查看>>
李开复:移动互联网机会最大 微博会现最大赢家
查看>>
2006年的IT十大战略技术
查看>>