Я некоторое время боролся с этой проблемой в своем приложении, поэтому я попытался воспроизвести проблему в простом фрагменте кода.
Я использую 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 в неосновном потоке? или я сделал что-то ослепительно заведомо неправильное!?
Ценю любую помощь!
Спасибо