列出boost io_service中的活动处理程序

Gea*_*phy 5 c++ boost boost-asio

在为工作中的客户端/服务器系统构建单元测试时,我遇到了一个问题,即在我关闭所有活动处理程序(我知道)后,我的io_service没有释放.

经过一天的代码搜索后,我遇到了错误的处理程序,该处理程序尚未集成到我的客户端关闭程序中.

我的问题是:是否有一种简单的方法可以在boost io_service中列出当前活动的处理程序?如果没有,为什么不呢?

任何见解将不胜感激.

jan*_*anm 1

有几个问题:

  • 簿记将变得昂贵,特别是在具有大量操作和显着并发性的系统中。
  • 即使您确实获得了列表,您也不知道它是否是最新的。

我不知道这些是否是 boost::asio 的具体原因,但这些原因引起了我的注意。

为了解决实际问题,析构函数和作用域是你的朋友。我发现拥有一个高级对象(例如套接字侦听器)的句柄容器很有用,并且当您想要关闭时让它们超出范围。我发现shared_ptr很好,但是你可以使用各种变体。

如果您必须stop()对每个要停止的对象调用一个方法,您就会忘记一些事情。让析构函数来做这项工作。