Najpierw trzeba uruchomić wątku w taki sposób, MFC nie usunąć obiekt wątek, kiedy to finished, domyślne ustawienie dla MFC wątku jest usunąć się tak chcesz to wyłączyć.
m_thread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL ,CREATE_SUSPENDED);
m_thread->m_bAutoDelete = FALSE;
m_thread->ResumeThread();
Teraz w wątku, chcesz mechanizm, który wątek wywołujący może wysłać sygnał do samego końca. Istnieje wiele sposobów, jeden jest WaitForSingleObject
, aby sprawdzić status sygnału lub w inny sposób jest po prostu wysłać ten wątek wiadomość, aby się zakończyć. To jest pełne wdzięku zakończenie, a raczej zabicie go.
Podczas gdy ten wątek się kończy (= wyjście z funkcji wątku, czyszczenie), możesz poczekać, aż główny wątek się zakończy, zanim zakończy działanie.
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;
}
ustawienie Uwaga m_bAutoDelete = FALSE
powyżej pozwoliły wciąż mamy poprawny uchwyt gdy wątek zakończy więc możemy czekać na niego. Ostatnią rzeczą, którą chcesz teraz zrobić, jest usunięcie obiektu CWinThread w celu zwolnienia jego pamięci (ponieważ wzięliśmy na siebie odpowiedzialność za to).