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: 0Kann 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. ;))