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 的可中断等待函数,以便若请求停止则中断该条件变量的等待。
成员函数
构造新的 stop_token 对象 (公开成员函数) | |
销毁 stop_token 对象 (公开成员函数) | |
赋值 stop_token 对象 (公开成员函数) | |
修改器 | |
交换二个 stop_token 对象 (公开成员函数) | |
观察器 | |
检查是否已请求关联停止状态停止 (公开成员函数) | |
检查能否请求关联停止状态停止 (公开成员函数) |
非成员函数
比较二个 std::stop_token 对象 (函数) | |
(C++20) |
特化 std::swap 算法 (函数) |
注解
一般不会独立构造 stop_token
对象,而是从 std::jthread
或 std::stop_source
取得它。这使它共享与 std::jthread
或 std::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