exception in thread ausserhalb auswerten



  • Hallo

    Wenn ich einen thread starte und darin einen exception fliegt kann ich diese catchen und über einen promise nach aussen geben. Hierzu muss ich aber dann noch promie.set_value aufrufen und über das zugehörige future future.get() aufrufen und dann die exception wiederum abfangen.

    In meinem thread führe ich nun aber eine wihle(true) Schleife aus. Ich möchte dass die Schleife immer weiter läuft auch wenn Exceptions fliegen. Kann ich die Exceptions irgendwie von ausserhalb des threads abfangen und diese auswerten.

    Habe hier mal etwas Code geschrieben um etwas besser zu verstehen was ich meine.

    #include <iostream>
    #include <thread>
    #include <future>
     
    void execute(std::promise<void>& prm)
    {
        while(true)
        {
                try
                {
                        std::cout<<"Inside Thread"<<std::endl;
                        throw std::exception("something bad happend");
                }       
                catch(...)
                {
                        prm.set_exception(std::current_exception()); 
                }
             
               // kann ich nur einmal setzen und nich in einer Schleife
                prm->set_value();            
            }
    }
     
    int main()
    {
        std::promise<void> prm;
        std::future<void> fut = prm.get_future();
        std::thread th(execute, prm);
        
        // müsste ich ja auch in einer Schleife machen. Muss doch irgendwie anders gehen?
        try
        {    
            std::cout<<fut.get()<<std::endl;
        }
        catch(std::exception e)
        {
                std::cout << e.what() << std::endl;
        }
        
        th.join();
        
        
        return 0;
    }
    


  • Du könntest Deinem thread eine Referenz auf eine queue mitgeben. Der main thread kann die dann abarbeiten wann er lustig ist?


Anmelden zum Antworten