Namespaces
Variants

std:: stop_token

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Определено в заголовочном файле <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
(public member function)
уничтожает объект stop_token
(public member function)
присваивает объект stop_token
(public member function)
Модификаторы
обменивает два объекта stop_token
(public member function)
Наблюдатели
проверяет, было ли запрошено остановка для связанного состояния остановки
(public member function)
проверяет, может ли быть запрошена остановка для связанного состояния остановки
(public member function)

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

(C++20)
сравнивает два объекта std::stop_token
(функция)
специализирует алгоритм 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); // выводит 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