gpt4 book ai didi

c++ - 在 boost::asio 中启动异步操作和运行 io_service 的正确顺序?

转载 作者:行者123 更新时间:2023-11-28 03:31:07 25 4
gpt4 key购买 nike

我试图了解启动 io_service io_service::run() 与应用程序中第一个异步操作的正确顺序,例如 async_accept .大多数提升示例似乎首先执行后者,不确定为什么。

boost documentation提出以下观点:

Your program must make a call to io_service::run() in order for the result to be retrieved. A call to io_service::run() blocks while there are unfinished asynchronous operations, so you would typically call it as soon as you have started your first asynchronous operation.

我从图中了解到,异步操作的结果是通过队列传递给 io_service 的,除非 io_service 已经在运行,否则它不会从该队列中获取结果。所以说 io_service 应该总是首先启动是不是正确的。该文档似乎另有暗示。有人可以解释一下吗?

最佳答案

async_accept 这样的异步操作将在操作系统中启动异步任务,这会将结果(一旦可用)放入 io_service 的事件队列中。

io_service::run 将轮询队列以获取结果并调用传递这些结果的处理程序。

当您没有异步任务时,io_service 没有要获取的结果,也没有可能产生任何结果的未完成的工作,因此它只是返回.

所以,你想要的顺序是:

  • 至少启动一个异步任务
  • 调用io_service::run启动轮询

您甚至可以启动一个可能启动整个 任务的异步任务,而永远不会让 io_service 无事可做。

关于c++ - 在 boost::asio 中启动异步操作和运行 io_service 的正确顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12609659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com