繁体   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