2009-05-01 18 views
11

Estoy creando una clase de subproceso para encapsular los métodos de subprocesos de Windows. Estoy intentando crear un método que haga que la aplicación espere a que se complete el hilo antes de que salga de la aplicación. Si utilizo un bucle while y un indicador booleano, funciona, pero obviamente aumenta el uso de mi CPU y simplemente no es ideal.Windows Threading Wait Método

¿De qué maneras usarías para esperar la finalización de un hilo? (No estoy realmente en busca de código aquí, sólo las zonas a estudiar)

Respuesta

27

Después de utilizar CreateThread para obtener un identificador de hilo, pasarlo a la API de Win32 WaitForSingleObject:

WaitForSingleObject(threadhandle, INFINITE); 

Si no lo hace use CreateThread (porque usa otro paquete de subprocesos), o tal vez su subproceso esté siempre activo ...

Luego puede seguir utilizando WaitForSingleObject. Simplemente cree un evento primero con la API Win32 CreateEvent, y espere a que el evento se configure con WaitForSingleObject. Al final de la secuencia, configure el evento con SetEvent y puede restablecer el evento con ResetEvent.

La mayoría de los paquetes de subprocesos tendrán su propia manera de esperar un subproceso. Al igual que en boost::thread, puede usar .join() o boost::condition.

+0

El único problema es que quiero volver a utilizar este subproceso, por lo que cuando la unidad de trabajo (un funtor) ha terminado el hilo se suspende, por lo que WaitForSingleObject se ejecuta indefinidamente –

+2

Bien, entonces puedes usar el método de evento que mencioné en su lugar. –

+0

Ok, gracias, veremos eso. –