Spec-Zone.ru › C++

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
(функция-член открытого доступа)
operator=
присваивает значение объекту stop_token
(функция-член открытого доступа)
Модификаторы
swap
обменивает местами два объекта stop_token
(функция-член открытого доступа)
Функции доступа
stop_requested
проверяет, был ли запрошен останов для связанного состояния остановки
(функция-член открытого доступа)
stop_possible
проверяет, можно ли запросить останов для связанного состояния остановки
(функция-член открытого доступа)

Функции, не являющиеся членами

operator==
(C++20)
сравнивает два объекта std::stop_token
(функция)
swap(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API