「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > `std :: thread`がまだC ++で実行されているかどうかを効果的に検出する方法は?

`std :: thread`がまだC ++で実行されているかどうかを効果的に検出する方法は?

2025-05-03に投稿されました
ブラウズ:368

How to Effectively Check if a `std::thread` is Still Running in C  ?

std :: threadがまだ実行されているかどうかを確認する方法(cross-platform)

std ::スレッドで作業する場合、効果的なスレッド管理のために実行状況を監視することが重要です。ただし、Joinable()メソッドは、スレッドがまだ実行されているかどうかを判断するために設計されていません。代わりに、この記事では、このニーズに対処するためのさまざまなプラットフォームに依存しない方法を紹介します。 std :: future :: wait_for(0ms)を使用すると、返されたステータス値を調べてスレッドのステータスを確認できます。 #include int main(){ Auto Future = std :: async(std :: launch :: async、[] { std :: this_thread :: sleep_for(3s); 8を返します。 }); //スレッドステータスを確認します auto status = future.wait_for(0ms); if(status == std :: future_status :: ready){ std :: cout

std :: promise(std :: threadを使用)

std :: asyncがオプションでない場合、将来のオブジェクトを取得することを約束することができます:

#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以降の簡単なアプローチは、ブールアトミックフラグを利用することです:

#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  

std :: packaged_task(std :: threadを使用)

は、std :: packaged_taskを活用することです。 #include int main(){ std :: packaged_task 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(); }

#include 
#include 

int main() {
  std::atomic done(false);

  std::thread t([&done] {
    std::this_thread::sleep_for(3s);
    done = true;
  });

  // Check thread status
  if (done) {
    std::cout 

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3