Rumah >pembangunan bahagian belakang >C++ >Bagaimana Saya Boleh Semak jika `std::thread` Masih Berjalan dalam C ?
Menyemak std::Thread Aktif
Dalam bidang multithreading, pemahaman jika std::thread masih dilaksanakan tetap penting . Artikel ini menyelidiki teknik praktikal untuk pengesahan status rangkaian bebas platform.
Menggunakan std::async dan std::future
Memanfaatkan std::async dan std: :future menawarkan pendekatan yang lancar untuk memantau status benang. Menggunakan wait_for() pada objek masa hadapan memberikan cerapan segera tentang keadaan urutan:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { 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; } }
Menggunakan std::promise dan std::future
Penyelesaian alternatif melibatkan memanfaatkan std::janji dan std::future:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { std::promise<bool> p; auto future = p.get_future(); std::thread t([&p] { std::this_thread::sleep_for(3s); p.set_value(true); }); 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; } t.join(); }
Menggunakan std::atomic
Pendekatan yang lebih mudah menggunakan std::atomic:
#include <thread> #include <atomic> #include <chrono> #include <iostream> int main() { std::atomic<bool> done(false); std::thread t([&done] { std::this_thread::sleep_for(3s); done = true; }); if (done) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } t.join(); }
Menggunakan std::packaged_task
Sempena std::thread, std::packaged_task menawarkan penyelesaian yang lebih halus:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { std::packaged_task<void()> 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(); }
Atas ialah kandungan terperinci Bagaimana Saya Boleh Semak jika `std::thread` Masih Berjalan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!