boost库在工作(21)任务之一
来源:互联网 发布:长沙排名优化 编辑:程序博客网 时间:2024/06/05 06:02
在软件开发里,常常遇到多个任务同时添加的情况,比如用户要下载一部电视连续剧,就会一起添加几十集,让它一集一集地下载。如果这时使用线程池来运行,就需要这个任务队列可以多个线程同时访问它,如果队列里没有任务时,可以让多个线程等着,只要有任务到达,就立即运行。在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任务队列,以后它会广泛使用到网络方面,因此学会这个例子,就打下了良好的基础。
- boost库在工作(21)任务之一
- boost库在工作(21)任务之一
- boost库在工作(16)线程之一
- boost库在工作(26)网络客户端之一
- boost库在工作(31)网络服务端之一
- boost库在工作(16)线程之一
- boost库在工作(26)网络客户端之一
- boost库在工作(31)网络服务端之一
- boost库在工作(22)任务之二
- boost库在工作(23)任务之三
- boost库在工作(24)任务之四
- boost库在工作(25)任务之五
- boost库在工作(22)任务之二
- boost库在工作(23)任务之三
- boost库在工作(24)任务之四
- boost库在工作(25)任务之五
- boost库在工作(2)作用域智能指针scoped_ptr之一
- boost库在工作(8)引用计数的智能指针shared_ptr之一
- 子查询
- memcached全面剖析–2.理解memcached的内存存储
- js实现密码强度验证
- java中一些关键字说明
- 常用的各种数据库连接
- boost库在工作(21)任务之一
- C++《析构函数的定义和使用》
- i2c总线设备测试应用程序
- BZOJ 1024 [SCOI2009] 生日快乐 题解与分析
- js中如何复制一个对象,如何获取所有属性和属性对应的值
- 在线人数监听器
- LCD设备驱动 相关结构体
- XML基础和XML编程
- Oracle SQL Loader