In primo luogo è necessario avviare la discussione in un modo così MFC non elimina l'oggetto thread quando è finished, l'impostazione predefinita per filo MFC è quello di eliminare se stesso in modo che si desidera spegnerlo.
m_thread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL ,CREATE_SUSPENDED);
m_thread->m_bAutoDelete = FALSE;
m_thread->ResumeThread();
Ora nel thread, si vuole un meccanismo che il thread chiamante può inviare un segnale per porre fine in sé. Ci sono diversi modi, uno è il WaitForSingleObject
per controllare lo stato del segnale o un altro modo è semplicemente inviare questo thread un messaggio per terminare se stesso. Questo è un finale grazioso piuttosto che ucciderlo.
Mentre questo thread termina da solo (= uscita dalla funzione thread, pulizia), è possibile fare in modo che il thread principale lo attende per terminare prima di uscire.
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;
}
impostazione Nota m_bAutoDelete = FALSE
sopra reso possibile abbiamo ancora un handle valido quando il filo finisce in modo che possiamo aspettare su di esso. L'ultima cosa che vuoi fare ora è eliminare l'oggetto CWinThread per liberare la sua memoria (dato che ci siamo presi la responsabilità di farlo).