如何捕捉不是从你的线程投掷?

时间:2012-03-16 22:50:13

标签: c++ linux multithreading boost error-handling

所以说我们有伪代码:

super_local_thread()
{
try{
throw err;
}catch(err)
{
throw err2;
}

我们用boost启动了该线程。 我们想用另一个线程来追查它的错误。怎么做这个?

3 个答案:

答案 0 :(得分:4)

C ++ 11指定current_exception函数(在标准中, 18.8异常处理部分),以便您可以完成此操作。

这是关于transporting exceptions between threads的MSDN文章,它使用了这个函数。

由于您使用的是Boost,因此这里是current_exception的Boost文档和transporting exceptions between threads上的Boost文章。

答案 1 :(得分:1)

此MSDN文章可能有用

http://msdn.microsoft.com/en-us/library/dd293602.aspx

  

为了实现传输异常,Visual C ++提供了   exception_ptr类型和current_exception,rethrow_exception和   copy_exception函数。

答案 2 :(得分:0)

你不能;异常仅发生在单个线程上。但是,您可以使用顶级函数捕获所有异常,并使用其他一些机制将异常报告给应用程序的其余部分。