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

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

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

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

你可能感兴趣的文章
SuperMap iClient3D for WebGL教程(Entity)-LabelGraphics
查看>>
SuperMap iClient3D for WebGL教程(Entity)-PolygonGraphics
查看>>
SuperMap iClient3D for WebGL教程-CylinderGraphics
查看>>
SuperMap iClient3D for WebGL教程-CorridorGraphics
查看>>
SuperMap iClient3D for WebGL教程-BoxGraphics
查看>>
SuperMap iDesktop Oracle数据库型的数据源创建
查看>>
环境搭建之iServer开启分布式分析服务
查看>>
模型编辑之模型编辑
查看>>
模型编辑之三角网处理
查看>>
纹理提取啥时候用
查看>>
杂谈GIS数据的获取
查看>>
环境搭建之基础环境准备(网络,SSH免密等)
查看>>
SuperMap iClient3D for WebGL教程(Entity)-WallGraphics
查看>>
大数据环境搭建之Hbase集群搭建
查看>>
SuperMap iClient3D for WebGL教程(Entity)-PolylineGraphics
查看>>
流数据分析之地理围栏应用
查看>>
SuperMap iClient3D for WebGL教程(Entity)-PointGraphics
查看>>
模型编辑之BIM轻量化
查看>>
制作地图的那些事(一)——制图之准备工作
查看>>
隧道构建之地形挖洞
查看>>