【发布时间】:2011-03-20 10:51:42
【问题描述】:
我正在使用一个相当简单的 boost::asio 设置,我从主线程调用 io_service.run()。 我有一个 tcp 解析器,并使用 async resolve 来查找地址。 当查找失败时,我会在异步回调中抛出异常。 我在主函数内部的 run() 调用之外捕获了这个异常。然后我在我的 io_service 实例(它是一个全局的)上调用 stop() 。 但是,当 main() 返回时,程序会挂起。事实证明,它正在等待一个永远不会来自解析器服务的 exit_event_。
我不想在退出时挂起。有什么我做错了吗?如果是这样,是什么?我在网上没有找到很多关于这些事情的讨论。 我在 Windows 7/64bit 上使用 boost 1.41.0。
【问题讨论】:
-
只是为了澄清:io_service.run 返回 - 你在调用 io_service.run 的 try-catch 中捕获异常?请提供代码 sn-p 演示问题。
-
如果没有重现问题的代码,几乎无法提供帮助。
-
我有完全相同的问题,抛出异常不是线程也不是回调,而是在对象方法中,当其他对象(服务器和客户端,发布异步监听作业)我在 try 中捕获异常捕获包装 io_service.run() et 调用 return 1;但程序永远不会退出......并停留在 io_service 析构函数中......你解决了这个问题吗?我们的项目是基于 asio 和 im effraid 使用一个有缺陷的库...
-
好吧,我明白为什么了,我已经解决了;)
标签: c++ boost boost-asio resolver