Exception und Threads



  • Hallo!

    Wenn ein Thread eine Exception wirft, dann kann die eigentlich niemand mehr
    fangen, oder?

    struct ExceptionBase: virtual std::exception, virtual boost::exception{};
    struct FirstException: virtual ExceptionBase{};
    struct SecondException: virtual ExceptionBase{};
    

    Ich baue daher noch eine Try/Catch-Schale um den Thread herum:

    void startMeAsThread()
    {
     try
     {
      someWork();
     }
     catch(ExceptionBase& e) 
     {
      pSavedException=new ExceptionBase(e); // ExceptionBase* pSavedException 
     }
    }
    

    damit man die Exception nach Ablauf des Threads untersuchen kann. Aber
    das ist nicht zufriedenstellend, denn damit ist der Typ auf die Basisklasse
    reduziert. Gibt es eine Technik, um beliebige Exceptions irgendwo abzulegen
    und später mit dem exakten Typ erneut zu werfen? Man könnte dann eine
    'nowThrowSavedExceptions()' Funktion machen...

    Danke



  • In C++0x gibt es std::exception_ptr , du könntest dir z.B. mal das Proposal N2179 oder die MSDN-Doku anschauen. Ansonsten hat Boost.Exception auch Lösungen parat.



  • Hallo Nexus!

    Vielen Dank, das war sehr hilfreich. Ich habe von Dir hier schon einige gute Beiträge gelesen. Großes Lob dafür!

    lg



  • Vielen Dank, schön dass ich helfen konnte 🙂


Log in to reply