Threads und Ausnahmen



  • Ich hab neben meinem Hauptthread noch ein Arbeiterthread welcher mit Hilfe von Streams kommuniziert. Das heißt der Hauptthread schickt die Eingabedaten per Stream zum Arbeiter und bekommt mit Hilfe eines andern die Ausgabe zurück.

    Nun kann es aber passieren, dass im Arbeiter ein Fehler auftritt, also eine Exception fliegt. Nun kann sie ja nicht aus dem Thread rausfliegen und darum wollte ich die Exception zwischenlagern, bis der Hauptthread versucht auf die Ausgaedaten zuzugreifen und sie dann im Hauptthread weiterwerfen.

    Das Problem ist aber, dass ich nicht weiß wie ich sie zwischenlagern soll.

    struct ThreadData{
      std::exception*err;
    };
    
    void thread_main(ThreadData&data){
      try{
        //...
      }catch(std::exception&err){
        // data.err = err.clone(); geht nicht
        data.err = new std::runtime_error(err.what()); // naja, auch nicht das Wahre
      }catch(...){
        data.err = new std::runtime_error("unknown exception"); // auch nicht optimal
      }
    }
    

Anmelden zum Antworten