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

时间:2010-09-25 12:10:12

标签: c++ boost boost-asio

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

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

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

任何见解都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

有一些问题:

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

我不知道这些是否是boost :: asio的具体原因,但这些原因突然出现在我身上。

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

如果必须在要停止的每个对象上调用stop()方法,那么您将忘记一些事情。让析构函数完成工作。