Zuerst Sie den Faden in einer Art und Weise zu beginnen haben so MFC nicht das Objekt Thread löschen, wenn es finished ist, ist die Standardeinstellung für MFC Thread selbst zu löschen, so dass Sie das ausschalten möchten.
m_thread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL ,CREATE_SUSPENDED);
m_thread->m_bAutoDelete = FALSE;
m_thread->ResumeThread();
Jetzt im Thread, wollen Sie einen Mechanismus, dass der Anrufer Thread kann ein Signal senden, um sich zu beenden. Es gibt mehrere Möglichkeiten, eine ist die WaitForSingleObject
, um den Status des Signals zu überprüfen oder eine andere Möglichkeit besteht darin, einfach diesem Thread eine Nachricht zu senden, um sich selbst zu beenden. Das ist ein anmutiges Ende, das eher tötet.
Während dieser Thread sich selbst beendet (= Beenden der Thread-Funktion, Bereinigen), können Sie den Haupt-Thread darauf warten, dass er beendet wird, bevor er beendet wird.
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;
}
Hinweis Einstellung m_bAutoDelete = FALSE
oben machte es möglich, dass wir noch einen gültigen Griff haben, wenn Thread beendet, so dass wir auf sie warten. Das letzte, was Sie jetzt tun möchten, ist das CWinThread-Objekt zu löschen, um seinen Speicher freizugeben (da wir die Verantwortung dafür übernommen haben).