首頁 >後端開發 >C++ >如何有效率地檢查C中std::thread的運作狀態?

如何有效率地檢查C中std::thread的運作狀態?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 22:28:13708瀏覽

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

檢查 std::thread 的運行狀態

在使用 C 開發多執行緒應用程式時,通常需要確定給定 std:: 的運行狀態線。然而,std::thread 缺乏方便的 timed_join() 方法,並且 joinable() 專門不適用於此目的。

C 11 解

如果您正在使用 C 11,一個優雅的解決方案是使用 std::async 和 std::future。 std::future 的wait_for 函數可讓您以簡潔的方式檢查線程狀態:

#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

使用std::promise

對於std::線程,你可以利用std::promise 來獲得future object:

#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);

原子標誌方法

另一個簡單的選項是使用原子標誌:

#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:

#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);
利用這些方法,您可以有效地檢查std::thread 是否仍在運行,確保多執行緒應用程式中更好的控制和協調。

以上是如何有效率地檢查C中std::thread的運作狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn