【问题标题】:What's the difference between boost::io_service poll_one and run_one?boost::io_service poll_one 和 run_one 有什么区别?
【发布时间】:2012-01-04 13:19:29
【问题描述】:

io_service::poll_one 运行 io_service 对象的事件处理循环 执行一个就绪处理程序。

io_service::run_one 运行 io_service 对象的事件处理循环 最多执行一个处理程序。

从那个解释看来 poll_one 可以执行多个处理程序? run_one 或 poll_one 是使用任何调用 run() 的线程还是只使用调用 poll_one/run_one 的线程?

ASIO 的文档非常少。

【问题讨论】:

  • 一个执行一个 READY 处理程序,另一个执行一个处理程序(准备好与否)。
  • 好的,READY 处理程序和非 READY 处理程序有什么区别?
  • 如果您有一个套接字并且处理程序的工作是从中读取一些内容,那么就绪处理程序就是附加到非空套接字的处理程序(因此您不必等待数据来源于网络)
  • 那么你想什么时候执行一个未就绪的处理程序?
  • 这取决于手头的应用程序。

标签: c++ boost boost-asio


【解决方案1】:

poll_one 将立即返回(非阻塞),以防没有要处理的事件。

run_one 将阻塞调用线程,直到准备好处理一个事件。

您还可以查看一些文档here

【讨论】:

  • 所以 run_one 的文档应该阅读“阻塞直到它执行一个处理程序”与“最多执行一个处理程序”?
  • 令人困惑。这里的“最多”意味着 0..1,但如果它在处理事件之前一直阻塞,那么它什么时候才能返回处理了 0 个事件?
  • 万一服务关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2020-02-20
相关资源
最近更新 更多