3

我有许多不同的线程 ( boost::thread_pool) 到boost::asio::io_service. 将io_service调用一个函数,该函数将触发async_read,该函数将触发另一个async_read,从中可以调用许多函数。这一切都在两个类中完成:线程从一个Server类产生,并async_read从一个类调用Client

如果我从(从类)throw调用的那些函数中,谁会得到异常?? 如果是这样,有什么方法可以忽略错误并恢复正常执行?async_readClientcatchServer

4

1 回答 1

3

您是否阅读过 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
}
于 2012-05-05T07:55:13.620 回答