命名空间
变体
操作

std::stop_token

来自 cppreference.com
< cpp‎ | thread
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协作取消
stop_token
(C++20)
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩锁和屏障
(C++20)
(C++20)
期货
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存顺序
原子操作的自由函数
原子标志的自由函数
 
 
在头文件 <stop_token> 中定义
class stop_token;
(自 C++20 起)

stop_token 类提供了检查是否已发出或可以发出停止请求的方法,用于其关联的 std::stop_source 对象。它本质上是关联的停止状态的线程安全“视图”。

stop_token 也可以传递给 std::stop_callback 的构造函数,以便在 stop_token 的关联 std::stop_source 被请求停止时调用回调函数。 stop_token 可以传递给 std::condition_variable_any 的可中断等待函数,以在请求停止时中断条件变量的等待。

内容

[编辑] 成员别名模板

类型 定义
callback_type<Callback> (自 C++26 起) std::stop_callback<Callback>

[编辑] 成员函数

构造新的 stop_token 对象
(公共成员函数) [编辑]
析构 stop_token 对象
(公共成员函数) [编辑]
分配 stop_token 对象
(公共成员函数) [编辑]
修改器
交换两个 stop_token 对象
(公共成员函数) [编辑]
观察者
检查关联的停止状态是否已被请求停止
(公共成员函数) [编辑]
检查关联的停止状态是否可以被请求停止
(公共成员函数) [编辑]

[编辑] 非成员函数

比较两个 std::stop_token 对象
(函数) [编辑]
专门化 std::swap 算法
(函数) [编辑]

[编辑] 注释

通常不会独立构造 stop_token 对象,而是从 std::jthreadstd::stop_source 中检索。这使其与 std::jthreadstd::stop_source 共享相同的关联停止状态。

特性测试 Std 特性
__cpp_lib_jthread 201911L (C++20) 停止标记加入线程

[编辑] 示例

#include <iostream>
#include <thread>
 
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); // prints 5 6 7 8... for approximately 3 seconds
    std::this_thread::sleep_for(3s);
    // The destructor of jthread calls request_stop() and join().
}

可能的输出

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