私は自分のアプリケーションでこの問題に苦労していたので、簡単なコード スニペットで問題を再現しようとしました。
Boost 1.44 と mingw32-g++ バージョン 4.4.1 を使用しています。Windows XP の場合
次のプログラムの期待される結果は次のとおりです。
>messageservice.exe
[debug]BEFORE EXCEPTION ****
[error]EXCEPTION HANDLED ****
[debug]AFTER TRY/CATCH
>
しかし、実際にはこれを行うこともあれば、「未処理の win32 例外...」(Just In Time デバッガーを使用) と詳細にクラッシュすることもあり、サイレントにクラッシュすることもあります。
だから私はなぜこれを行うのか途方に暮れています。
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 インスタンスを管理することは違法ですか? または、私は盲目的に明らかに間違ったことをしましたか!?
どんな助けにも感謝します!
ありがとう