En primer lugar usted tiene que comenzar el hilo de una manera tan MFC no se elimina el objeto hilo cuando es finished, la configuración predeterminada para el hilo de MFC es borrarse a sí mismo por lo que desea apagar eso.
m_thread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL ,CREATE_SUSPENDED);
m_thread->m_bAutoDelete = FALSE;
m_thread->ResumeThread();
Ahora en el hilo, desea un mecanismo que el hilo de la persona que llama puede enviar una señal para que se termine. Hay varias maneras, una es la WaitForSingleObject
para verificar el estado de la señal u otra forma es simplemente enviar a este hilo un mensaje para que termine. Esto es un final elegante que lo mata.
Mientras que este subproceso se está terminando (= saliendo de la función de subproceso, limpiando), puede hacer que el subproceso principal espere para finalizar antes de que finalice.
int wait = 2000 // seconds (I am waiting for 2 seconds for worker to finish)
int dwRes = WaitForSingleObject(m_thread->m_hThread, wait);
switch (dwRes)
{
case WAIT_OBJECT_0:
TRACE(_T("worker thread just finished")); break;
case WAIT_TIMEOUT:
TRACE(_T("timed out, worker thread is still busy")); break;
}
ajuste de la nota anterior m_bAutoDelete = FALSE
hecho posible que todavía tienen un identificador válido cuando el hilo termina por lo que podemos esperar en él. Lo último que desea hacer ahora es eliminar el objeto CWinThread para liberar su memoria (ya que asumimos la responsabilidad de hacerlo).