::WaitForSingleObject (m_hThread, 0) 和 ::WaitForSingleObject (m_hThread, 1) 的区别
有趣之极 2008-11-25 03:33:03
UINT ShowTagThreadFunc (LPVOID pParam)
{
ShowTagThreadData* pData = reinterpret_cast<ShowTagThreadData*>(pParam);
CProgressCtrl* pPC = (CProgressCtrl*)CWnd::FromHandle(pData->hwndProgressCtrl);
pPC->SetRange32(0, 0xFFFF);
pPC->SetPos(0);
int iLo, iHi;
pPC->GetRange(iLo, iHi);
for (int i=iLo; i<iHi; i++)
{
if (::WaitForSingleObject(pData->pStopEvent->m_hObject, 1) == WAIT_OBJECT_0)
{
break;
}
pPC->SetPos(i+1);
}
delete pData;
return 0;
}
void CThreadDlg::OnBnClickedOk()
{
m_event.ResetEvent();
ShowTagThreadData* pData = new ShowTagThreadData;
pData->pStopEvent = &m_event;
pData->hwndProgressCtrl = m_pc.m_hWnd;
DWORD dwThreadId;
m_hThread = chBEGINTHREADEX(NULL, 0, ShowTagThreadFunc, (PVOID) (DWORD_PTR) pData,
0, &dwThreadId);
ASSERT(m_hThread != NULL);
}
void CThreadDlg::OnBnClickedButton1()
{
m_event.SetEvent();
::WaitForSingleObject(m_hThread, INFINITE);
::CloseHandle(m_hThread);
m_hThread = NULL;
}