boost::asio::io_service::work类

本文详细介绍了Boost.Asio库中的work类工作原理。work类通过控制io_service的运行状态,确保在所有异步操作完成后,io_service能够正确退出。此外,还讲解了work类的构造与析构函数如何影响io_service的生命周期。
摘要由CSDN通过智能技术生成

出处:http://blog.csdn.net/pud_zha/article/details/37561011

 

work是一个很小的辅助类,只支持构造函数和析构函数。(还有一个get_io_service返回所关联的io_service) 

  构造一个work时,outstanding_work_+1,使得io.run在完成所有异步消息后判断outstanding_work_时不会为0,因此会继续调用GetQueuedCompletionStatus并阻塞在这个函数上。
  而析构函数中将其-1,并判断其是否为0,如果是,则post退出消息给GetQueuedCompletionStatus让其退出。


  因此work如果析构,则io.run会在处理完所有消息之后正常退出。work如果不析构,则io.run会一直运行不退出。如果用户直接调用io.stop,则会让io.run立刻退出。


  特别注意的是,work提供了一个拷贝构造函数,因此可以直接在任意地方使用。对于一个io_service来说,有多少个work实例关 联,则outstanding_work_就+1了多少次,只有关联到同一个io_service的work全被


析构之后,io.run才会在所有消息处 理结束之后正常退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值