std::stop_token
Определён в заголовочном файле <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>
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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/stop_token