我正在用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
多线程功能有
...
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,则不会出现死锁。如果我在按下关闭按钮之前让线程查看最顶层,那么也没有问题。那么为什么会陷入僵局?
我学会了这个艰难的道路......像花岗岩一样坚硬。 – 2010-12-23 13:27:06