我正在尝试理解启动io_service io_service::run()
与我的应用程序中第一个异步操作的正确顺序,例如async_accept
。大多数提升示例似乎首先执行后者,不确定原因。
boost documentation提出以下观点:
您的程序必须调用io_service :: run()才能获得结果 检索。在有的情况下调用io_service :: run()块 未完成的异步操作,因此您通常将其称为 一旦你开始了第一次异步操作。
我从图中了解到异步操作的结果是通过队列传递给io_service的,除非io_service已经运行,否则它不会从这个队列中获取结果。因此,首先应始终启动io_service是不正确的。该文件似乎暗示不然。有人可以解释一下吗?
答案 0 :(得分:2)
像async_accept
这样的异步操作将启动操作系统中的异步任务,它会将结果(尽快)放入io_service
的事件队列中。
io_service::run
将轮询队列中的结果,并调用传递这些结果的处理程序。
如果您没有异步任务,则无法获取io_service
的结果,并且也没有可能产生任何结果的未完成的工作,因此它只会返回。
所以,你想要的顺序是:
io_service::run
以启动投票您甚至可以启动单个异步任务,该任务可能会启动整个链任务,并且永远不会让io_service
用完工作。