」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > C++中如何有效檢測`std::thread`是否仍在運行?

C++中如何有效檢測`std::thread`是否仍在運行?

發佈於2025-05-03
瀏覽:852

How to Effectively Check if a `std::thread` is Still Running in C  ?
如何檢查std :: thread是否仍在運行(cross-platform)

使用std :: async and std :: future

的人的那些

{ std :: this_thread :: sleep_for(3s); 返回8; }); //檢查線程狀態 自動狀態= future.wait_for(0ms); if(status == std :: future_status ::準備就緒){ std :: cout

Using std::promise (with std::thread)

If std::async is not an option, you can employ std::promise to obtain a future object:

#include 
#include 

int main() {
  auto future = std::async(std::launch::async, [] {
    std::this_thread::sleep_for(3s);
    return 8;
  });

  // Check thread status
  auto status = future.wait_for(0ms);
  if (status == std::future_status::ready) {
    std::cout 使用std :: atomic 與std :: thread 

C 11及以後的一種簡單的方法是利用布爾原子flag:

{ std :: this_thread :: sleep_for(3s); 完成= true; }); //檢查線程狀態 如果(完成){ std :: cout Using std::packaged_task (with std::thread)
#include 
#include 

int main() {
  std::promise p;
  auto future = p.get_future();

  std::thread t([&p] {
    std::this_thread::sleep_for(3s);
    p.set_value(true);
  });

  // Check thread status
  auto status = future.wait_for(0ms);
  if (status == std::future_status::ready) {
    std::cout Another option is to leverage std::packaged_task, which provides a cleaner alternative to using std::promise:

#include #include int main(){ std :: packaged_task 任務([] { std :: this_thread :: sleep_for(3s); }); auto future = task.get_future(); std ::線程t(std :: move(task)); //檢查線程狀態 自動狀態= future.wait_for(0ms); if(status == std :: future_status ::準備就緒){ // ... } T.Join(); } [&& && && && &&華
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3