簡體   English   中英

如何使用 C++ 取消線程?

[英]How can I cancel a thread using C++?

POSIX 提供了 function pthread_cancel 來取消線程執行,但似乎 C++ 沒有提供這樣的 function p_cancelthread 和混合線程? 我還在 linux 系統上看到,std::thread 是 POSIX 線程的包裝器

盡管 pthread_cancel 沒有確切的替代品,但您可以使用jthread來接近。

class jthread 表示單個執行線程。 它具有與 std::thread 相同的一般行為,除了 jthread 在銷毀時自動重新加入,並且可以在某些情況下取消/停止。

這不會中斷線程,但仍然依賴於“合作”機制。 正在運行的 jthread 必須不斷輪詢它的停止令牌並自行停止。

一個很好的例子可以在 這里找到。

    std::jthread sleepy_worker([] (std::stop_token stoken) {
        for(int i=0; i < 10; i++) {
            std::this_thread::sleep_for(300ms);
            if(stoken.stop_requested()) {
                std::cout << "Sleepy worker is requested to stop\n";
                return;
            }
            std::cout << "Sleepy worker goes back to sleep\n";
        }
    });
    sleepy_worker.request_stop();
    sleepy_worker.join();

但是直截了當地回答你的問題:不,(目前,c++20)沒有可移植的方式來取消線程。

PS:實際上“殺死”一個線程(或與此相關的任何事情)通常應該避免。 因此,我個人懷疑您是否會在 ISOC++ 中看到它的機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM