boost库在工作(21)任务之一

在软件开发里,常常遇到多个任务同时添加的情况,比如用户要下载一部电视连续剧,就会一起添加几十集,让它一集一集地下载。如果这时使用线程池来运行,就需要这个任务队列可以多个线程同时访问它,如果队列里没有任务时,可以让多个线程等着,只要有任务到达,就立即运行。在 boost 库里提供了一个强大的任务队列,这个队列可以使用线程池访问,也可以当任务为空时阻塞线程。使用这个任务队列,可以让多个任务动态运行,以及适应不同的情况,可以得心应手。在 Windows 系统上实现是采用 IOCP 的原理来实现,因此这个任务队列不但可以运行一般的任务,也适用于网络应用方面。具体的使用例子如下:
// boost_014.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>

void Run(int nVal)
{
	std::cout << "Run: " << nVal << std::endl;
}

//测试任务队列

void TestTask(void)
{
	//定义一个任务队列。
	boost::asio::io_service ioSerice;	
	//放入三个任务。
	ioSerice.post(boost::bind(Run, 10));
	ioSerice.post(boost::bind(Run, 2));
	ioSerice.post(boost::bind(Run, 88));

	//运行队列里的任务。
	ioSerice.run();
}


int _tmain(int argc, _TCHAR* argv[])
{
	//
	TestTask();

	system("pause");

	return 0;
}

在这个例子主要使用boost库里异步库asio,其中boost::asio::io_service是IO服务队列。在函数TestTask里使用io_service对象的post方法,把三个任务放到队列里,然后调用run方法开始运行添加的任务。当编译运行这个例子,就会输出如下的结果:

Run: 10

Run: 2

Run: 88

请按任意键继续. . .

 

从结果可以看到任务队列是先进先出的队列,最早添加的任务最开始执行。通过这个例子就可以学会使用asio库里的IO任务队列,以后它会广泛使用到网络方面,因此学会这个例子,就打下了良好的基础。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值