Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Semak Status Berjalan std::thread dengan Cekap dalam C ?

Bagaimanakah Saya Boleh Semak Status Berjalan std::thread dengan Cekap dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-24 22:28:13
asal
742 orang telah melayarinya

How Can I Efficiently Check the Running Status of a std::thread in C  ?

Menyemak Status Berjalan std::thread

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
Salin selepas log masuk

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([&amp;p] { ...; p.set_value(true); }); // Run task on a new thread

// Get thread status using wait_for
auto status = future.wait_for(0ms);
Salin selepas log masuk

Pendekatan Bendera Atom

Satu lagi pilihan mudah ialah menggunakan bendera atom:

#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
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan