在我的应用程序中,我一直在为这个问题苦苦挣扎,所以我试图在一个简单的代码片段中重现这个问题。
我正在使用 Boost 1.44 和 mingw32-g++ 版本 4.4.1。在 Windows XP 上
我对以下程序的预期结果是:
>messageservice.exe
[debug]BEFORE EXCEPTION ****
[error]EXCEPTION HANDLED ****
[debug]AFTER TRY/CATCH
>
但实际上它有时会这样做,有时会详细地崩溃“未处理的 win32 异常......”(使用即时调试器),有时它会默默地崩溃
所以我不知道它为什么这样做。
如果我删除 try...catch 块,程序运行得很好。
这是代码:
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#define L_(lvl) std::cout<<"\n["<<#lvl<<"]"
void nothingfun() { } /* an empty job */
void threadfun() {
boost::asio::io_service myIoService; /* thread's own io_service object */
for(int i=0;i<10000;i++) {
myIoService.post(¬hingfun);
}
}
int main()
{
boost::thread t(&threadfun);
L_(debug)<<"BEFORE EXCEPTION ****";
try{
throw "aaah!";
} catch(...) {
L_(error)<<"EXCEPTION HANDLED ****";
}
L_(debug)<<"AFTER TRY/CATCH";
t.join();
return 0;
}
在非主线程中管理 io_service 实例是否违法?还是我做了一些明显错误的事情!?
感谢任何帮助!
谢谢