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

Mary-Kate Olsen
Lepaskan: 2024-11-24 22:28:13
asal
625 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!

sumber:php.cn
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