Namespaces
Variants

std::stop_source:: request_stop

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
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_callback s, зарегистрированные для того же связанного состояния остановки, будут вызваны синхронно, в том же потоке, request_stop ( ) в котором был вызван. Если вызов callback завершается исключением, std::terminate вызывается.

Если объект stop_source имеет состояние остановки, но запрос на остановку уже был выполнен, эта функция возвращает false . Однако нет гарантии, что другой объект stop_source , который только что (успешно) запросил остановку, все еще не находится в процессе вызова функции stop_callback .

Если request_stop ( ) действительно отправляет запрос на остановку (т.е. возвращает true ), тогда все переменные условия базового типа std::condition_variable_any , зарегистрированные с прерываемым ожиданием для stop_token , связанных с состоянием остановки stop_source , будут уведомлены.

Пример