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, чтобы прервать ожидание переменной условия, если запрошена остановка.
Члены-функции
создает новый объект 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.
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_jthread | 201911L | (C++20) | Токен остановки и объединяющий поток jthread |
Пример
#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/w/cpp/thread/stop_token