std::stop_source::request_stop
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()ystop_possible()se pueden invocar simultáneamente en otros objetosstop_tokenystop_sourcedel mismo estado de detención.request_stop()se puede invocar simultáneamente en otros objetosstop_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
| Esta sección está incompleta Razón: sin ejemplo |