Re[17]: CProgressCtrl и поток
От: dandy  
Дата: 06.07.08 11:49
Оценка: 2 (1)
Здравствуйте, 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 — не пользовал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.