您是否阅读过 Boost.Asio手册的这一部分?
摘要:“如果从处理程序中抛出异常,则允许异常通过抛出线程对 run()、run_one()、poll() 或 poll_one() 的调用传播。没有其他线程正在调用这些函数中的任何一个受到影响。然后由应用程序负责捕获异常。”
所以这取决于你的catch
陈述在哪里。
更新
异常工作的一般方式是,一旦发生错误,创建错误的函数将throw
发生异常。任何调用函数都必须try
对它调用的工作函数以及catch
解决错误的异常。或者,您可以将捕获的异常(或任何其他异常)重新抛出到链上更高的任何调用函数。
void some_function()
{
// do some work
if (error_occurred)
// don't know context, so pass the buck to calling function
throw std::exception;
}
void some_calling_function()
{
try {
some_function(); // could throw
} catch (std::exception& e) {
// do some error handling depending in context
}
// code will resume here
}