【问题标题】:Keep boost asio io_service保持提升 asio io_service
【发布时间】:2021-12-09 10:41:17
【问题描述】:

我通常为整个应用程序保留一个 io_service 对象,并使用多个线程在它们上调用 run。通过引用创建套接字或计时器使用 io_service。当所有线程在应用程序退出时完成并且存在时会发生什么,比如说在 tcp 套接字上调用的关闭或取消操作。 io_service 不再可用。将 io_service 传递给任何与 asio 相关的类时是否存在 io_service 的副本,或者是未定义的行为?

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    从来没有io_service 的副本(或更新的io_context 替换已弃用的io_service)。那是因为它不可复制。

    如果您在异步操作尚未完成时不维护生命周期,则行为确实是未定义的。但是,通过强制停止服务以优雅地等待它完成任何挂起的操作来确保不发生异步操作/完成并不难。

    我建议后一种方法用于生产质量代码。

    【讨论】:

      猜你喜欢
      • 2020-05-02
      • 2012-04-04
      • 2011-01-20
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多