gpt4 book ai didi

boost-asio - 为什么必须调用 io_service::reset() ?

转载 作者:行者123 更新时间:2023-12-04 23:41:42 32 4
gpt4 key购买 nike

io_service::reset documentation声明 reset()必须在后续调用 run() 之前调用, run_one() , poll()poll_one() .

问题:

  • 为什么这是必要的? -
  • 如果忽略此步骤,我会期待什么行为?
  • 为什么这个要求不够重要,不足以保证 assert如果它被忽视?

  • 一些上下文:我完成了一些单元测试的调试,这些单元测试被称为 poll()。反复没有 reset()并试图检查每次正在执行的预期处理程序数量。似乎对 poll() 的调用次数足够多。 ,所有处理程序最终都按预期的顺序执行,但它需要的调用比您预期的要多。正确调用 reset()解决了这个问题,但我很想知道这是否是不调用 reset() 的唯一副作用,或者如果有可能出现更糟糕的效果,例如删除处理程序或可能出现在多线程示例中的效果。

    最佳答案

    io_service已停止:

  • poll() 的所有调用, poll_one() , run() , 和 run_one()将尽快返回
  • 后续调用 poll() , 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() .

    关于boost-asio - 为什么必须调用 io_service::reset() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643311/

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