この説明では、マルチスレッドにおける重要な問題、つまり std:: :thread はまだ実行中です。この知識は、さまざまなプログラミング シナリオにおけるスレッドの効果的な調整と監視に不可欠です。
C の std::thread クラスには、timed_join() や joinable() のような便利なメソッドがありません。スレッドの実行ステータスを決定するために明示的に設計されています。 joinable() メソッドは主に異なる目的を目的としており、専門家は別のアプローチを模索しています。
std の力を利用する: :async と std::future を使用すると、スレッドのステータスを簡単に監視できます。 std::async は別のスレッドでタスクを実行し、std::future はその結果へのハンドルを提供します。タイムアウトゼロの std::future の wait_for 関数を採用することで、スレッドの実行ステータスを正確に確認できます。
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::async と std::future を使用することが不可能な場合は、代替手段として次のような方法があります。 std::promise と std::future。このアプローチにより、スレッドから直接 future オブジェクトを取得できます。
std::promise<bool> p; auto future = p.get_future(); //... p.set_value(true);
もう一度、future オブジェクトに wait_for を使用すると、必要なステータス情報が提供されます。
より単純な要件の場合、アトミック フラグを使用した次のアプローチが考えられます。 suffice:
std::atomic<bool> done(false); //... done = true;
アトミック フラグにアクセスすることで、スレッドがタスクを完了したかどうかを判断できます。
その他のソリューションには、std::packages_task の活用が含まれます。 、std::thread とのよりクリーンな統合、または Windows 上の Windows API などのプラットフォーム固有のメカニズムの利用を提供します。
std::thread のステータスをチェックするための最適なソリューションの選択は、アプリケーションの特定の要件と制約によって異なります。これらの方法を理解することで、開発者はマルチスレッド プログラムを効果的に管理し、望ましい動作を保証できます。
以上がC で std::thread がまだ実行されているかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。