Heim >Backend-Entwicklung >C++ >Wie kann ich überprüfen, ob ein „std::thread' noch in C läuft?
Prüfung auf einen aktiven std::Thread
Im Bereich des Multithreadings bleibt es von entscheidender Bedeutung, zu verstehen, ob ein std::thread noch ausgeführt wird . Dieser Artikel befasst sich mit praktischen Techniken zur plattformunabhängigen Thread-Statusüberprüfung.
Verwendung von std::async und std::future
Nutzung von std::async und std: :future bietet einen nahtlosen Ansatz zur Überwachung des Thread-Status. Die Verwendung von wait_for() für das zukünftige Objekt bietet sofortigen Einblick in den Zustand des Threads:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { auto future = std::async(std::launch::async, [] { std::this_thread::sleep_for(3s); return 8; }); auto status = future.wait_for(0ms); if (status == std::future_status::ready) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } }
Verwendung von std::promise und std::future
Eine alternative Lösung beinhaltet die Nutzung von std::promise und std::future:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { std::promise<bool> p; auto future = p.get_future(); std::thread t([&p] { std::this_thread::sleep_for(3s); p.set_value(true); }); auto status = future.wait_for(0ms); if (status == std::future_status::ready) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } t.join(); }
Verwendung von std::atomic
Ein einfacherer Ansatz nutzt std::atomic:
#include <thread> #include <atomic> #include <chrono> #include <iostream> int main() { std::atomic<bool> done(false); std::thread t([&done] { std::this_thread::sleep_for(3s); done = true; }); if (done) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } t.join(); }
Verwendung von std::packaged_task
In Verbindung mit std::thread, std::packaged_task bietet eine verfeinerte Lösung:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { std::packaged_task<void()> task([] { std::this_thread::sleep_for(3s); }); auto future = task.get_future(); std::thread t(std::move(task)); auto status = future.wait_for(0ms); if (status == std::future_status::ready) { // ... } t.join(); }
Das obige ist der detaillierte Inhalt vonWie kann ich überprüfen, ob ein „std::thread' noch in C läuft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!