std::stop_token

来自cppreference.com
< cpp‎ | thread
 
 
线程支持库
线程
(C++11)
(C++20)
stop_token
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
 
 
定义于头文件 <stop_token>
class stop_token;
(C++20 起)

stop_token 类提供是否已经或能对其所关联的 std::stop_source 对象作出停止请求的方法。它实质上是关联停止状态的线程安全“视图”。

亦能传递 stop_tokenstd::stop_callback 的构造函数,使得若 stop_token 的关联 std::stop_source 被请求停止则将调用该回调。。而且能传递 stop_tokenstd::condition_variable_any 的可中断等待函数,以便若请求停止则中断该条件变量的等待。

成员函数

构造新的 stop_token 对象
(公开成员函数)
销毁 stop_token 对象
(公开成员函数)
赋值 stop_token 对象
(公开成员函数)
修改器
交换二个 stop_token 对象
(公开成员函数)
观察器
检查是否已请求关联停止状态停止
(公开成员函数)
检查能否请求关联停止状态停止
(公开成员函数)

非成员函数

比较二个 std::stop_token 对象
(函数)
特化 std::swap 算法
(函数)

注解

一般不会独立构造 stop_token 对象,而是从 std::jthreadstd::stop_source 取得它。这使它共享与 std::jthreadstd::stop_source 的相同的关联停止状态。

示例

#include <thread>
#include <iostream>
 
using namespace std::literals::chrono_literals;
 
void f(std::stop_token stop_token, int value)
{
    while (!stop_token.stop_requested()) {
        std::cout << value++ << ' ' << std::flush;
        std::this_thread::sleep_for(200ms);
    }
    std::cout << std::endl;
}
 
int main()
{
    std::jthread thread(f, 5); // 打印 5 6 7 8... 约 3 秒
    std::this_thread::sleep_for(3s);
    // jthread 的析构函数调用 request_stop() 与 join() 。
}

可能的输出:

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19