Я пишу многопоточное приложение на основе диалога с Visual C ++. Имеет несколько просмотров.
Функция OnInitialUpdate. Я запускаю рабочий поток следующим образом:
pThread = AfxBeginThread(MultiThread, this, THREAD_PRIOIRITY_NORMAL, 0 CREATE_SUSPENDED, NULL);
pThread->m_bAutoDelete = false;
pThread->ResumeThread();
функция OnDestroy у меня есть
eventKill.SetEvent();
WaitForSingleObject(pHread->m_hThread, INFINITE);
delete pThread
Функция MultiThread имеет
...
while (WaitForSingleObject(pView->eventKill.m_hObject, 0) != WAIT_OBJECT_0)
{
...
pView->InvalidateRect(rect);
pView->UpdateWindow();
Sleep(100);
}
return 0;
Обычно это нормально завершается, но я нашел одно исключение. У меня есть эта тема и ее представление работает. Существует еще одно представление, которое в настоящее время находится сверху, а представление потока частично находится под ним. Если я закрываю представление потока, непосредственно нажимая его кнопку закрытия, но не заставляю этот поток просматривать самое верхнее окно, программа блокируется в WaitForSingleObject (pThread-> m_hThread, INFINITE). Если я не использую UpdateWindow, не будет тупиков. Если я сделаю просмотр потока самым верхним, прежде чем нажать кнопку закрытия, проблем тоже не будет. Так почему тупик?