ホームページ  >  記事  >  バックエンド開発  >  C で std::thread の実行ステータスを効率的に確認するにはどうすればよいですか?

C で std::thread の実行ステータスを効率的に確認するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-24 22:28:13630ブラウズ

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

Using std::promise

For std::スレッドでは、std::promise を利用して将来を取得できます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);

アトミック フラグ アプローチ

もう 1 つの簡単なオプションは、アトミック フラグを使用することです:

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

よりクリーンなソリューションについては、次のことを検討してください。 std::packages_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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。