std::stop_source::request_stop
bool request_stop() noexcept; | (since C++20) |
Вызывает запрос на остановку в состоянии остановки, если у объекта stop_source есть состояние остановки и запрос на остановку еще не был выполнен.
Определение выполняется атомарно, и если запрос на остановку был выполнен, состояние остановки атомарно обновляется, чтобы избежать гонок, таким образом:
-
stop_requested()иstop_possible()могут быть одновременно вызваны на другихstop_tokenиstop_sourceтого же состояния остановки; -
request_stop()может быть одновременно вызван на других объектахstop_source, и только один фактически выполнит запрос на остановку.
Однако, см. раздел Примечания.
Параметры
(нет)
Возвращаемое значение
true если у объекта stop_source есть состояние остановки и это обращение сделало запрос на остановку, в противном случае false.
Последовательные условия
stop_possible() равно false или stop_requested() равно true.
Примечания
Если объект request_stop() действительно выдает запрос на остановку (т.е., возвращает true), то все зарегистрированные для того же связанного состояния остановки stop_callback будут вызваны синхронно в том же потоке, в котором был выдан request_stop(). Если вызов обратного вызова завершается исключением, вызывается std::terminate.
Если у объекта stop_source есть состояние остановки, но запрос на остановку уже был выполнен, эта функция возвращает false. Однако нет гарантии, что другой объект stop_source, который только что (успешно) запросил остановку, не находится еще в процессе вызова функции stop_callback.
Если объект request_stop() действительно выдает запрос на остановку (т.е., возвращает true), то все переменные состояния, базовый тип которых std::condition_variable_any, зарегистрированные с прерывимым ожиданием для stop_token связанных с состоянием остановки объекта stop_source, будут уведомлены.
Пример
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/stop_source/request_stop