Здравствуйте, KokS, Вы писали:
class CManualEvent : public CEvent
{
public:
CManualEvent() : CEvent(FALSE, TRUE) {}
};
//В классе диалога:
static UINT ThreadProc( LPVOID pParam );
CManualEvent ProgressEvent;
CManualEvent ExitEvent;
// в OnInit...
ProgressEvent.ResetEvent();
ExitEvent.ResetEvent();
pThread = AfxBeginThread(ThreadProc, this);
UINT CTestKocsDlg::ThreadProc(LPVOID pParam)
{
CTestKocsDlg * p = static_cast<CTestKocsDlg *>(pParam);
while(1)
{
if(WAIT_OBJECT_0 == WaitForSingleObject(p->ProgressEvent, 200))
{
return 0;
}
if(WAIT_OBJECT_0 == WaitForSingleObject(p->ExitEvent, 0))
{
return 0;
}
// Тут делай, что нужно
}
return 0;
}
void CTestKocsDlg::OnDestroy()
{
ExitEvent.ResetEvent();
ExitEvent.SetEvent();
if(::WaitForSingleObject(pThread->m_hThread, 400) != WAIT_OBJECT_0)
{
AfxMessageBox(_T("Oops!"));
::TerminateThread(pThread->m_hThread, 0);
}
CDialog::OnDestroy();
}
Насчет WaitForMultipleObjects — не пользовал