Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich den Laufstatus eines std::thread in C effizient überprüfen?

Wie kann ich den Laufstatus eines std::thread in C effizient überprüfen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-24 22:28:13630Durchsuche

How Can I Efficiently Check the Running Status of a std::thread in C  ?

Überprüfen des Betriebsstatus eines std::thread

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([&amp;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([&amp;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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn