c++ - 在 boost::thread 线程中使用异常

  显示原文与译文双语对照的内容


我开始玩 boost:: 线程,但我还是有点跟不上这个问题:

我不明白为什么这个程序会在引发异常的情况下崩溃,因为我尝试在线程中捕捉它。 我认为,只要处理发生在与引用相同的线程中,就可以使用异常。


#include <boost/thread.hpp>
#include <exception>

using namespace std;

void doWork();
void thrower();

int main( int argc, char** argv ){
 boost::thread worker(doWork);
 worker.join();
 return 0;
}

void doWork(){
 try{
 thrower();
 }
 catch( const exception &e ){
//handle exception
 }
}
void thrower(){
//program terminates as soon as the exception is thrown
 throw exception();
}

其他信息:
*Using MinGW32
*Boost v.1. 44
动态针对线程库的多线程调试dll版本

时间:

我发现了问题:它是一个 Bug 库中的一个,只在使用 MINGW 版本的版本时发生。 提升跟踪跟踪票 #4258

如果你已经在throws库中设置了 workaround,我现在可以对 static 库进行链接,只要它们被捕获到同一个线程中,就可以处理异常。

非常感谢你的评论

在包含多个共享库的应用程序中,你可能必须非常小心地删除异常的可见性。 默认情况下,gcc不会为共享库外部可见的异常生成RTTI信息,导致跨共享库边界'消失'抛出异常。 关于详细描述和可能的陷阱,请参见这里的

当然,我不能确定你是否面对这个问题,但是从你描述的这个问题中,它是可以能的。

...