Ich habe in dieser Anwendung für ein kleines Problem mit diesem Problem gekämpft und so habe ich versucht, das Problem in einem einfachen Code-Snippet zu reproduzieren.Verwalten von io_service in einem anderen Thread, seltsames Problem mit Ausnahmen
Ich verwende Boost 1.44 und mingw32-g ++ Version 4.4.1. auf Windows XP
Mein erwartetes Ergebnis für das folgende Programm:
>messageservice.exe
[debug]BEFORE EXCEPTION ****
[error]EXCEPTION HANDLED ****
[debug]AFTER TRY/CATCH
>
Aber in Wirklichkeit das es manchmal tut, manchmal stürzt verbosely "nicht behandelte Ausnahme win32 ..." (mit Just In Time Debugger), und manchmal stürzt es still
So bin ich ratlos, warum es das tut.
Wenn ich den try ... catch-Block entfernen, läuft das Programm gut. Hier
ist der Code:
#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;
}
Ist es illegal eine io_service Instanz in einem Nicht-Haupt-Thread zu verwalten? oder habe ich etwas offensichtlich blind gemacht !?
Schätzen Sie jede Hilfe!
Dank
Ihr Code läuft für mich ohne Abstürze mit Win XP, Boost 1.44 und Visual Studio 2008. Sie wissen, dass der io_service in Ihrem Beispiel nichts tut, da die Ereignisschleife nicht gestartet wurde (call io_service run() oder) Renne einmal())? – nabulke