检查活动的 std::Thread
在多线程领域,了解 std::thread 是否仍在执行仍然至关重要。本文深入探讨了与平台无关的线程状态验证的实用技术。
使用 std::async 和 std::future
利用 std::async 和 std: :future 提供了一种监控线程状态的无缝方法。在 future 对象上使用 wait_for() 可以立即了解线程的状态:
#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; } }
使用 std::promise 和 std::future
另一种解决方案涉及利用 std::promise 和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(); }
使用 std::atomic
更简单的方法使用 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(); }
使用std::packaged_task
与 std::thread 结合,std::packaged_task 提供了更精细的解决方案:
#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(); }
以上是如何检查'std::thread”是否仍在 C 中运行?的详细内容。更多信息请关注PHP中文网其他相关文章!