• 线程运行boost库在工作(22)任务之二


    每日一贴,今天的内容关键字为线程运行

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

        从面前已学习过线程池,只须要把线程池添加到务任队列里,以可就现实这个功能了,例子如下:

        每日一道理
    人的生命似洪水奔流,不遇着岛屿和暗礁,难以激起美丽的浪花。
    // boost_015.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <boost/asio.hpp>
    #include <boost/bind.hpp>
    #include <boost/thread.hpp>
    #include <boost/thread/mutex.hpp>
    #include <iostream>
    
    void TaskRun(int nVal)
    {
    	//上面输出须要锁加,不能多个线程同享输出。
    	static boost::mutex mutexCout;
    	boost::lock_guard<boost::mutex> autoLock(mutexCout);
    	std::cout << "TaskRun: " << nVal << std::endl;
    }
    
    //封装线程组运行的类, 并且演示应用类成员函数作为线程组运行函数
    //软件开辟人员: 蔡军生  2013-04-05
    //QQ: 9073204
    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();
    	}
    	//测试务任队列
    	//软件开辟人员: 蔡军生  2013-04-28
    	//QQ: 9073204
    	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;
    }

    文章结束给大家分享下程序员的一些笑话语录: 与女友分手两月有余,精神萎靡,面带菜色。家人介绍一女孩,昨日与其相亲。女孩果然漂亮,一向吝啬的我决定破例请她吃晚饭。
    选了一个蛮贵的西餐厅,点了比较贵的菜。女孩眉开眼笑,与我谈得很投机。聊着聊着,她说:“我给你讲个笑话吧。”“ok”
      “一只螳螂要给一只雌蝴蝶介绍对象,见面时发现对方是只雄蜘蛛。见面后螳螂问蝴蝶‘如何?’,‘他长的太难看了’,‘别看人家长的丑,人家还有网站呢’。”
      “呵呵………”我笑。忽然她问:“你有网站吗?”  

  • 相关阅读:
    什么是大小端
    mina
    出现jar包找不到的问题解决方案
    InnoDB 静态数据加密的常见问题合集
    mysqldump 数据库备份程序,mysqldump 选项合集
    出现The MySQL server is running with the --secure-file-priv option so it cannot问题的原因
    小睡一会,做了一个梦
    IntelliJ IDEA is a solution that appears after importing a project with a clock icon(idea导入项目之后出现时钟的解决方案)
    IntelliJIDE不显示项目文件夹的问题
    夏天的记忆
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3050567.html
Copyright © 2020-2023  润新知