herausfinden, ob ein std::thread noch läuft



  • Hallo zusammen,

    gibt es eine Möglichkeit, herauszufinden, ob ein std::thread noch läuft ohne ihn zu joinen?

    Mit g++ 4.7.2 hab ich folgendes getestet:

    #include <iostream>
    #include <thread>
    #include <chrono>
    void foo()
    {
        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "The thread is done." << '\n';
    }
    int main()
    {
        std::thread t;
        std::cout << "before starting, joinable: " << t.joinable() << '\n';
        t = std::thread(foo);
        std::cout << "after starting, joinable: " << t.joinable() << '\n';
        std::this_thread::sleep_for(std::chrono::seconds(2));
        std::cout << "after finishing, joinable: " << t.joinable() << '\n';
        t.join();
        std::cout << "after joining, joinable: " << t.joinable() << '\n';
    }
    

    Ausgabe:

    before starting, joinable: 0
    after starting, joinable: 1
    The thread is done.
    after finishing, joinable: 1
    after joining, joinable: 0
    

    Kann man schon im Beispiel bei "after finishing" herausfinden, ob das t.join(); danach dauern wird, oder direkt returned, weil eh schon alles vorbei ist?



  • Setze ein Flag per Hand. Das C++ bietet nur einen kleinen gemeinsamen Nenner zwischen den Betriebssystem als Interface. Aber du moechtest wahrscheinlich keinen Thread sondern eher Future oder Promise.



  • OK, thx.
    (Trotzdem doof, so. ;))


Anmelden zum Antworten