我有许多不同的主题(boost::thread_pool
)到boost::asio::io_service
。 io_service
将调用一个函数,该函数将触发async_read
,这将触发另一个async_read
,从中可以调用许多函数。这都是在两个类中完成的:从Server
类生成的线程,从async_read
类调用Client
。
我throw
(来自async_read
类)调用的那些函数Client
提供了catch
,谁将获得Server
例外? {{1}}?如果是这样,有没有办法忽视错误并恢复正常执行?。
答案 0 :(得分:3)
您是否阅读过Boost.Asio manual的这一部分?
<强>摘要强>: “如果从处理程序抛出异常,则允许异常通过抛出线程调用run(),run_one(),poll()或poll_one()进行传播。没有其他调用这些函数的线程受到影响。应用程序有责任捕获异常。“
因此,这取决于您拥有catch
声明的位置。
<强>更新强>
异常工作的一般方式是,在出现错误时,创建错误的函数将throw
异常。任何调用函数都必须try
它调用的worker函数,并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
}