Boost.Asio 异步执行方法,post()\dispach()\wrap().
来源:互联网 发布:怎么在官网下载mysql 编辑:程序博客网 时间:2024/06/09 17:25
Asio中的异步操作不仅包括 异步的客户端服务端的连接和异步的数据读写,还包括很多可以异步执行的操作。
Asio中有三种方式异步执行你指定的方法:post()、dispach()、wrap()。
- post()这个方法能立即返回,并且请求一个io_service实例调用制定的函数操作(function handler),之后会在某一个盗用io_service.run()的线程中执行。
- dispach()这个方法请求一个io_service实例调用函数操作,但是如果当前线程执行了io_service.run(),它就会直接调用handler。
- wrap()这个方法包装一个方法,当它被调用时它会调用io_service.dispach().
post()例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
运行结果:
上面的程序中有三个线程启动了io_server.run(),循环请求执行func(int i )方法,io_service会选择一个线程去执行func方法。所以无法确定顺序。
dispach()例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
运行结果:
程序先输出偶数后输出奇数,因为偶数使用dispatch()执行,又因为主线程调用了service.run(),所以直接调用,而post执行偶数时,是直接返回的,而后在调用。
wrap()例子
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
运行结果:
service.warp()把dispatched_func_2包装成一个函数,传给test(),当test函数去执行func()时,跟service.dispatch(dispatched_func_1);是等价的。
《Boost.Asio C++ Network Programming》
阅读全文
0 0
- Boost.Asio 异步执行方法,post()\dispach()\wrap().
- Boost.Asio 异步执行方法,post()\dispach()\wrap().
- boost asio异步通信
- boost asio 异步
- 异步工作 boost asio
- 异步客户端 boost asio
- 异步服务端 boost asio
- 异步客户端 boost asio
- 异步服务端 boost asio
- boost asio 异步io
- boost asio 应用方法学——异步的组织
- boost::ASIO的异步方式
- boost::asio学习 异步方式
- boost::ASIO的异步方式
- boost::ASIO的异步方式
- boost::asio的异步方式
- boost::asio编程-异步TCP
- boost::ASIO的异步方式
- mysql 用FEDERATED引擎实现DBLINK
- fastjson属性首字母大写问题
- 前端面试之前要准备的那些事
- 深度分析游戏中的随机概率
- LSP快速扩散
- Boost.Asio 异步执行方法,post()\dispach()\wrap().
- React Native学习笔记二之写个Hello World
- 【NOIP考前题目回顾】Luogu P1047
- MySQL索引:聚簇索引与非聚簇索引的区别
- Ipython:交互式的Python命令行
- 调用图灵机器人接口进行聊天
- [RK3288][Android6.0] 不同分辨率的bootanimation.zip下载
- 如何上传jar包至Maven私服
- CSS选取第几个标签元素:nth-child、first-child、last-child