Espacios de nombres
Variantes

std::stop_source::request_stop

De cppreference.com
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
(C++11)
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
(C++11)
Recuperación segura
(C++26)
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
<tbody> </tbody>
bool request_stop() noexcept;
(desde C++20)

Emite una solicitud de detención al estado de detención, si el objeto stop_source tiene un estado de detención y aún no se le ha solicitado que se detenga.

La determinación se hace atómicamente, y si se solicitó la detención, el estado de detención se actualiza atómicamente para evitar condiciones de carrera, de tal manera que:

  • stop_requested() y stop_possible() se pueden invocar simultáneamente en otros objetos stop_token y stop_source del mismo estado de detención.
  • request_stop() se puede invocar simultáneamente en otros objetos stop_source, y solo uno realizará realmente la solicitud de detención. Véase la sección de Notas más abajo.

Parámetros

(Ninguno)

Valor de retorno

true si el stop_source tiene un estado de detención y esta invocación hizo una solicitud de detención, false de lo contrario.

Poscondiciones

stop_possible() es false o stop_requested() es true.

Notas

Si la llamada a request_stop() emite una solicitud de detención (es decir, devuelve true), entonces cualquier stop_callback registrada para el mismo estado de detención asociado se invocará sincrónicamente, en el mismo hilo en el que se emite la llamada a request_stop(). Si una invocación de una devolución de llamada egresa mediante una excepción, se llama a std::terminate.

Si la llamada a stop_source tiene un estado de detención pero ya se ha hecho una solicitud de detención, esta función devuelve false. Sin embargo, no hay garantía que otro objeto stop_source que ha solicitado (exitosamente) una detención no esté todavía en proceso de invocar una función stop_callback.

Si la llamada a request_stop() emite una solicitud de detención (es decir, devuelve true), entonces todas las variables de condición de tipo base std::condition_variable_any registradas con una espera interrumpible para los stop_token asociados con el estado de detención del stop_source serán notificadas.

Ejemplo