【发布时间】:2010-10-11 14:48:44
【问题描述】:
我开始玩 boost::threads,但我有点被这个问题困住了:
我不明白为什么这个程序会在抛出异常后立即崩溃,因为我试图在线程中捕获它。我认为只要处理发生在与抛出相同的线程中,就可以处理异常?
#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();
}
附加信息:
*使用 MinGW32
*Boost v.1.44
*针对线程库的多线程调试dll版本动态链接
【问题讨论】:
-
如果没有正确的前向声明和
using namespace std,这甚至无法编译。但如果我添加这些,它在 Ubuntu Linux w/Boost 1.40 上运行良好。 -
对不起,这是代码的简化版本,用于显示问题。你是静态链接还是动态链接?
-
对我也很好。 Mac OS X 使用 Boost 1.44 动态链接。
-
感谢您的测试,这让我不知道下一步该做什么。我一直在尝试所有我能找到的编译器/链接器选项来让这个该死的小东西运行
-
@zitroneneis:用于构建 Boost.Threads 库的 g++ 是否与您用于构建程序的 g++ 具有相同的 ABI?
标签: c++ multithreading boost boost-thread