2010-09-25 56 views
5

在为工作中的客户机/服务器系统构建单元测试时,遇到了一个问题,在我关闭了所有活动处理程序(我意识到)之后,io_service未释放。在boost中列出活动处理程序io_service

经过一天的代码拖网,我发现了错误的处理程序,它没有被集成到我的客户机关机程序中。

我的问题是这样的:有没有简单的方法来列出boost io_service中当前活动的处理程序?如果不是,为什么不呢?

任何有识之士将不胜感激。

+1

+1有趣的问题。我在asio-users邮件列表上看到过它的问题,但我认为它没有得到答案。 http://sourceforge.net/mailarchive/forum.php?thread_name=i3aupp%2458b%241%40dough.gmane.org&forum_name=asio-users – 2010-09-25 12:32:30

回答

1

有几个问题:

  • 簿记将变得昂贵,特别是在有大量业务和显著并发系统。
  • 即使你确实得到了一份清单,你也不知道它是否是最新的。

我不知道这些是boost :: asio的具体原因,但是这些原因会跳出来对我。

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

如果您必须对要停止的每个对象调用stop()方法,那么您将会忘记一些东西。让破坏者完成这项工作。