Heim > Artikel > Backend-Entwicklung > Wie kann ich den Laufstatus eines std::thread in C effizient überprüfen?
Bei der Entwicklung von Multithread-Anwendungen mit C ist es oft notwendig, den Betriebsstatus eines bestimmten std:: zu bestimmen. Faden. Allerdings fehlt std::thread eine praktische timed_join()-Methode und joinable() ist ausdrücklich nicht für diesen Zweck gedacht.
Die C 11-Lösung
Wenn Sie Wenn Sie mit C 11 arbeiten, ist die Verwendung von std::async und std::future eine elegante Lösung. Mit der Funktion „wait_for“ von std::future können Sie den Thread-Status auf prägnante Weise überprüfen:
#include <future> #include <thread> auto future = std::async(std::launch::async, [] { ... }); // Run task on a new thread // Check thread status with zero milliseconds wait time auto status = future.wait_for(0ms); if (status == std::future_status::ready) // Thread finished else // Thread still running
Mit std::promise
Für std:: Thread können Sie std::promise nutzen, um eine Zukunft zu erhalten Objekt:
#include <future> #include <thread> std::promise<bool> p; auto future = p.get_future(); std::thread t([&p] { ...; p.set_value(true); }); // Run task on a new thread // Get thread status using wait_for auto status = future.wait_for(0ms);
Atomic Flag Approach
Eine weitere einfache Option ist die Verwendung einer Atomic Flag:
#include <thread> #include <atomic> std::atomic<bool> done(false); std::thread t([&done] { ...; done = true; }); // Run task with flag setting if (done) // Thread finished else // Thread still running
Std: :packaged_task
Für eine sauberere Lösung, denken Sie darüber nach std::packaged_task:
#include <future> #include <thread> std::packaged_task<void()> task([] { ... }); auto future = task.get_future(); std::thread t(std::move(task)); // Run task on new thread // Check thread status using wait_for auto status = future.wait_for(0ms);
Durch die Verwendung dieser Ansätze können Sie effektiv überprüfen, ob ein std::thread noch läuft, und so eine bessere Kontrolle und Koordination in Ihren Multithread-Anwendungen gewährleisten.
Das obige ist der detaillierte Inhalt vonWie kann ich den Laufstatus eines std::thread in C effizient überprüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!