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 — не пользовал
Re[18]: CProgressCtrl и поток
От: KokS  
Дата: 06.07.08 11:56
Оценка:
Здравствуйте, dandy, Вы писали:

D>Насчет WaitForMultipleObjects — не пользовал


За ответ спасибо.
Но все равно хочется разобраться с WaitForMultipleObjects.
Что у меня не так? Может еще кто-нибудь подскажет?
Re[18]: CProgressCtrl и поток
От: KokS  
Дата: 06.07.08 13:00
Оценка:
Здравствуйте, dandy, Вы писали:

D>[ccode]

D>class CManualEvent : public CEvent
.....................


В вашем варианте этот самый Oooops тоже иногда выскакивает
Re[19]: CProgressCtrl и поток
От: dandy  
Дата: 06.07.08 13:51
Оценка:
Здравствуйте, KokS, Вы писали:

KS>Здравствуйте, dandy, Вы писали:


KS>В вашем варианте этот самый Oooops тоже иногда выскакивает


Нужно увеличить продолжительность ожидания завершения потока в OnDestroy()
Re[20]: CProgressCtrl и поток
От: dandy  
Дата: 06.07.08 13:57
Оценка:
Здравствуйте, dandy, Вы писали:

D>Нужно увеличить продолжительность ожидания завершения потока в OnDestroy()

С другой стороны, если ты не модифицировал код, то он выскакивать не должен.
Если модифицировал, то см. предыдущий коммент.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.