Rumah > pembangunan bahagian belakang > C++ > Bagaimana Saya Boleh Semak jika `std::thread` Masih Berjalan dalam C ?

Bagaimana Saya Boleh Semak jika `std::thread` Masih Berjalan dalam C ?

Barbara Streisand
Lepaskan: 2024-12-01 06:10:13
asal
864 orang telah melayarinya

How Can I Check if a `std::thread` is Still Running in 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;
    }
}
Salin selepas log masuk

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([&amp;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();
}
Salin selepas log masuk

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([&amp;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();
}
Salin selepas log masuk

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

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!

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