Home >Backend Development >C++ >How Can I Efficiently Check the Running Status of a std::thread in C ?
In developing multithreaded applications with C , it often becomes necessary to determine the running status of a given std::thread. However, std::thread lacks a convenient timed_join() method, and joinable() is specifically not intended for this purpose.
The C 11 Solution
If you're working with C 11, an elegant solution is to employ std::async and std::future. The wait_for function of std::future enables you to check the thread status in a concise manner:
#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
Using std::promise
For std::thread, you can leverage std::promise to obtain a future object:
#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
Another straightforward option is to use an 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
For a cleaner solution, consider 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);
By utilizing these approaches, you can effectively check if a std::thread is still running, ensuring better control and coordination in your multithreaded applications.
The above is the detailed content of How Can I Efficiently Check the Running Status of a std::thread in C ?. For more information, please follow other related articles on the PHP Chinese website!