std::stop_token
Definido en el archivo de encabezado <stop_token>
|
||
class stop_token; |
(desde C++20) | |
La clase stop_token
proporciona los medios para verificar si se ha realizado o se puede realizar una solicitud de detención para su objeto asociado std::stop_source. Es esencialmente una "vista" segura para hilos del estado de detención asociado.
Un objeto de tipo stop_token
también se puede pasar al constructor de std::stop_callback, de modo que la devolución de llamada se invocará si al objeto asociado std::stop_source de la instancia de stop_token
se le solicita que se detenga. Además, se puede pasar un objeto de tipo stop_token
a las funciones de espera interrumpibles de std::condition_variable_any, para interrumpir la espera de la variable de condición si se ha solicitado que se detenga.
Contenido |
[editar] Funciones miembro
Construye un nuevo objeto stop_token (función miembro pública) | |
Destruye el objeto stop_token (función miembro pública) | |
Asigna el objeto stop_token (función miembro pública) | |
Modificadores | |
Intercambia dos objetos stop_token (función miembro pública) | |
Observadores | |
Comprueba si se ha solicitado al estado de detención asociado que se detenga (función miembro pública) | |
Comprueba si se puede solicitar al estado de detención asociado que se detenga (función miembro pública) |
[editar] Funciones no miembro
Compara dos objetos std::stop_token (función) | |
(C++20) |
Especializa el algoritmo std::swap (función) |
[editar] Notas
Un objeto stop_token
generalmente no se construye de forma independiente, sino que se recupera de un std::jthread
o std::stop_source
. Esto hace que comparta el mismo estado de detención asociado que std::jthread
o std::stop_source
.
[editar] Ejemplo
#include <thread> #include <iostream> using namespace std::literals::chrono_literals; void f(std::stop_token stop_token, int value) { while (!stop_token.stop_requested()) { std::cout << value++ << ' ' << std::flush; std::this_thread::sleep_for(200ms); } std::cout << std::endl; } int main() { std::jthread thread(f, 5); // imprime 5 6 7 8... aproximadamente por 3 segundos std::this_thread::sleep_for(3s); // El destructor de jthread llama a request_stop() y a join(). }
Posible salida:
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19