P
Den Thread so anlegen, dass der Speicher nicht automatisch freigegeben wird:
m_pMeinThread = AfxBeginThread(MyThreadProc, 0,
THREAD_PRIORITY_NORMAL,
0, CREATE_SUSPENDED);
m_pMeinThread->m_bAutoDelete = FALSE;
m_pMeinThread->ResumeThread();
eine globale Variable vom Typ CEvent anlegen, die beide Threads nutzen können:
CEvent g_eventBeenden;
Im Arbeitsthread den Status des Events abfragen. Wenn das Event
(vom Hauptthread) gesetzt wurde, den Arbeitsthread beenden, z.B. mit return 0;
// im Arbeitsthread
if (::WaitForSingleObject(g_eventBeenden, 0) == WAIT_OBJECT_0)
return 0; // Thread beenden
Den Arbeitsthread aus dem Hauptthread beenden, und Speicher freigeben
// im Hauptthread
g_eventBeenden.SetEvent();
// warten bis der Thread beendet wurde
DWORD ExitCode = -1;
do
{
Sleep(50);
::GetExitCodeThread(m_pMeinThread->m_hThread, &ExitCode);
} while (ExitCode == STILL_ACTIVE);
delete m_pMeinThread;
m_pMeinThread = NULL;