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, чтобы прервать ожидание переменной условия, если запрошена остановка.

Члены-функции

(конструктор)
создает новый объект stop_token
(публичная функция-член)
(деструктор)
уничтожает объект stop_token
(публичная функция-член)
operator=
присваивает объект stop_token
(публичная функция-член)
Модификаторы
swap
меняет местами два объекта stop_token
(публичная функция-член)
Наблюдатели
stop_requested
проверяет, был ли запрошен останов связанного состояния
(публичная функция-член)
stop_possible
проверяет, можно ли запросить останов связанного состояния
(публичная функция-член)

Внеклассовые функции

operator==
сравнивает два объекта 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) Токен остановки и объединяющий поток 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

Spec-Zone.ru

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