Dalam membangunkan aplikasi berbilang benang dengan C , selalunya menjadi perlu untuk menentukan status berjalan std tertentu:: benang. Walau bagaimanapun, std::thread tidak mempunyai kaedah timed_join() yang mudah, dan joinable() secara khusus tidak dimaksudkan untuk tujuan ini.
Penyelesaian C 11
Jika anda sedang bekerja dengan C 11, penyelesaian yang elegan ialah menggunakan std::async dan std::future. Fungsi wait_for std::future membolehkan anda menyemak status urutan dengan cara yang ringkas:
#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
Menggunakan std::promise
Untuk std:: thread, anda boleh memanfaatkan std::promise untuk mendapatkan masa depan objek:
#include <future> #include <thread> std::promise<bool> p; auto future = p.get_future(); std::thread t([&p] { ...; p.set_value(true); }); // Run task on a new thread // Get thread status using wait_for auto status = future.wait_for(0ms);
Pendekatan Bendera Atom
Satu lagi pilihan mudah ialah menggunakan bendera atom:
#include <thread> #include <atomic> std::atomic<bool> done(false); std::thread t([&done] { ...; done = true; }); // Run task with flag setting if (done) // Thread finished else // Thread still running
Std: :packaged_task
Untuk penyelesaian yang lebih bersih, pertimbangkan std::packaged_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);
Dengan menggunakan pendekatan ini, anda boleh menyemak dengan berkesan sama ada std::thread masih berjalan, memastikan kawalan dan penyelarasan yang lebih baik dalam aplikasi multithread anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak Status Berjalan std::thread dengan Cekap dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!