std::stop_source::request_stop
bool request_stop() noexcept; | (начиная с 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_callbacks, зарегистрированные для того же связанного состояния остановки, будут вызваны синхронно в том же потоке, в котором отправляется 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/cpp/thread/stop_source/request_stop