std::stop_token
来自cppreference.com
在标头 <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 对象 (公开成员函数) | |
观察器 | |
检查是否已请求关联停止状态停止 (公开成员函数) | |
检查能否请求关联停止状态停止 (公开成员函数) |
[编辑]非成员函数
(C++20) | 比较两个 std::stop_token 对象 (函数) |
(C++20) | 特化 std::swap 算法 (函数) |
[编辑]注解
一般不会独立构造 stop_token
对象,而是从 std::jthread 或 std::stop_source 取得。这使它与 std::jthread 或 std::stop_source 共享相同的关联停止状态。
功能特性测试宏 | 值 | 标准 | 功能特性 |
---|---|---|---|
__cpp_lib_jthread | 201911L | (C++20) | 停止令牌与结合线程 |
[编辑]示例
运行此代码
#include <iostream>#include <thread> usingnamespace 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