multithreading - threading - Cómo destruir un objeto de hilo
threading programacion (1)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo termino un hilo en C ++ 11? 4 respuestas
Estoy escribiendo un servidor de conversación multiproceso basado en C ++.
Cuando un nuevo cliente se une, el hilo principal crea un nuevo hilo para administrar el cliente.
Quiero destruir el hilo cuando el cliente se desconecta, por lo que configuro correctamente esta funcionalidad, de modo que cuando el cliente envía un mensaje de salida se llame a Terminate ().
Pero Terminate (), en lugar de destruir solo el único hilo, destruyó todos los hilos.
¿Qué se debe hacer para que solo se destruya el hilo que quiero destruir?
No tienes que hacer nada especial.
std::thread
obtiene un parámetro invocable en su constructor y ese invocable es la función que ejecuta el hilo.
Si ese aviso finaliza en algún momento, un hilo separado puede limpiarse a sí mismo. solo asegúrate de
- salir de la función de manejo del cliente cuando el cliente se desconecta
- separar el hilo
Un diseño simplista puede ser similar a esto:
while(server.is_on()){
auto client = server.acccept_client();
std::thread thread([client = std::move(client)]{
handle_client_until_disconnection(client);
});
thread.detach();
}
Otro enfoque es usar un grupo de hilos. ese grupo de subprocesos se construye cuando la aplicación aumenta y se destruye cuando la aplicación finaliza.