tiempo threading thread stop programacion multitarea mismo metodos hilos example entre ejecutar detener comunicacion como multithreading c++11 server winsock2

multithreading - threading - Cómo destruir un objeto de hilo



threading programacion (1)

Esta pregunta ya tiene una respuesta aquí:

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.