2016-02-26 102 views
2

io_service::resetdocumentation指出reset()必须后续调用run()run_one()poll()poll_one()之前被调用。为什么必须调用io_service :: reset()?

问题:

  • 为什么是这个必要吗? -
  • 如果忽略此步骤,我可能会期望什么行为?
  • 为什么此要求不足以保证assert被忽视?

一些背景:我完成调试检查调用poll()反复无reset(),并试图检查正在每次执行处理程序的预期数量的一些单元测试。看起来有足够的电话号码给poll(),所有的处理程序最终都会按照预期的顺序执行,但它会比你想象的要多得多。正确调用reset()可以解决这个问题,但我很想知道这是不是调用reset()的唯一副作用,或者是否存在潜在的更糟糕的效果,如可能出现在多线程示例中的处理程序或效果。

回答

2

io_service已经停止:尽快

  • 后续调用poll()

    • 所有的poll()poll_one()run()调用,以及run_one()将返回,poll_one()run()run_one()将返回立即不调用任何处理程序或处理事件循环

    调用io_service::reset()io_service设置为不再处于停止状态,允许对poll()poll_one()run()run_one()的后续调用调用处理程序并处理事件循环。


    Why is this necessary?

    这是必要的,如果一个人希望调用处理或处理事件循环一旦io_service已明确通过io_service.stop()运行失去工作的停止或暗示。

    What behaviour might I expect if this step is neglected?

    如果io_service.stopped()true,那么后续调用poll()poll_one()run()run_one()不会执行任何工作。

    Why is this requirement not important enough to warrant an assert if it's neglected?

    io_service::reset()文档的使用这个词的“必须”倾向于设置一个过于重要音调不提不调用reset()的后果。通过io_service::stop()描述的行为是不够的关键,以保证一个错误:

    • Subsequent calls to run() , run_one() , poll() or poll_one() will return immediately until reset() is called.

    reset(),唯一的硬性要求是不会把它当有未完成的调用poll()poll_one()run() ,和run_one()

  • 相关问题