J'ai eu de la difficulté avec ce problème pendant un petit moment dans mon application et j'ai donc essayé de reproduire le problème dans un simple fragment de code. J'utilise Boost 1.44 et mingw32-g ++ 4.4.1. Windows XPGestion de io_service dans un autre thread, problème étrange avec des exceptions
Mon résultat attendu pour le programme suivant est:
>messageservice.exe
[debug]BEFORE EXCEPTION ****
[error]EXCEPTION HANDLED ****
[debug]AFTER TRY/CATCH
>
Mais en réalité, il fait parfois cela, se bloque parfois verbeux « exception non gérée win32 ... » (avec Just Débogueur Time), et parfois il se bloque silencieusement
Donc je ne sais pas pourquoi il le fait.
Si je supprime le bloc try ... catch, le programme fonctionnera correctement.
Voici le 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;
}
est-il illégal de gérer une instance de io_service dans un thread non principal? ou est-ce que j'ai fait quelque chose d'aveuglement manifestement faux?
Appréciez toute aide!
Merci
Votre code s'exécute pour moi sans crash en utilisant Win XP, Boost 1.44 et Visual Studio 2008. Vous êtes conscient du fait que le io_service ne fera rien dans votre exemple puisque la boucle d'événement n'est pas démarrée (appelez io_service run() ou exécuter une fois())? – nabulke