Heim > Backend-Entwicklung > C++ > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-11-24 22:28:13
Original
627 Leute haben es durchsucht

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage