0
응용 프로그램에서이 문제를 해결하기 위해 고심하고 있으므로 간단한 코드 조각으로 문제를 재현하려고했습니다.다른 스레드에서 io_service 관리 예외가있는 이상한 문제
부스트 1.44 및 mingw32-g ++ 버전 4.4.1을 사용 중입니다. 윈도우 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 인스턴스를 관리하는 것은 불법입니다 : 여기
코드인가? 또는 내가 뭔가 blindingly 분명히 잘못 했어!?감사합니다.
감사
는 솔루션 (http://news.gmane.org/gmane.comp.lib.boost.asio.user)를위한 매트 Gruenke에
Win XP, Boost 1.44 및 Visual Studio 2008을 사용하여 충돌없이 코드가 실행됩니다. 이벤트 루프가 시작되지 않았으므로 io_service가 예제에서 아무 것도하지 않는다는 사실을 알고 있습니다 (io_service run() 호출 또는 run_once())? – nabulke