2012-05-05 57 views
3

我有很多不同的线程(boost::thread_pool)到boost::asio::io_serviceio_service将调用将触发async_read的函数,这将触发另一个async_read,从中可以调用许多函数。这全部在两个类中完成:从Server类生成的线程和从Client类调​​用的async_readBoost,异常,线程和异步,我应该如何处理它们?

提供了throwasync_read调用的那些函数(来自Client类),谁会得到catch这个异常? Server?如果是这样,有没有办法忽略错误并恢复正常执行?

回答

3

您是否阅读了Boost.Asio manual的这部分内容?

摘要: “如果异常是从处理程序抛出,异常被允许通过任何其他线程的run(),run_one(),轮询()或poll_one(投掷线程的调用)进行传播。那些正在调用这些函数的任何函数都会受到影响然后,应用程序有责任捕获例外。“

所以这取决于你有你的catch声明。

UPDATE

通用的方式,例外的工作是在一个错误创建错误将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 
} 
+2

请加什么可以在这个链接找到一个总结,或者说解决了OP的问题代码的例子:如果我保存此网页和离线阅读,你的答案是不值得的事情:X –

+0

@ MatthieuM。 OK,但是如果没有OP的代码,我该如何提供解决他的问题的代码? – TemplateRex

+0

嗯,这是一个通用的指导方针,因此需要花费时间更新答案。 –