时间:2010-07-24 07:55:47

标签: c++ boost boost-asio resolver

2 个答案:

答案 0 :(得分:1)

  

然后我在我的io_service上调用stop()

当您需要停止io_service时,请尝试使用此提示(从io_service documentation复制):

boost::asio::io_service io_service;
auto_ptr<boost::asio::io_service::work> work(
    new boost::asio::io_service::work(io_service));
...
work.reset(); // Allow run() to exit. 

原因很简单(也来自文档):调用io_service::stop()将导致io_service run()调用尽快返回,放弃未完成的操作并且不允许调度现成的处理程序。

因此,如果您需要调度所有处理程序,则调用io_service::stop()是不够的。

答案 1 :(得分:0)

stop()只是表示io_service停止了。如果您使用另一个run()调用跟随stop()调用,它应该返回并正确清理。

有一些关于在documentation中从处理程序中抛出异常的讨论。

我也猜测这个问题可能与某些对象生命周期问题有关,例如io服务被破坏而其他东西仍在引用它。仔细看看这些示例以及如何使用共享指针来确保对象仍然存在。