Использование MessageBox в потоке
От: Alexche  
Дата: 22.10.01 01:22
Оценка:
Запускаю поток, в котором есть такие строки:
if (!CreateProcess( NULL, cmdline, NULL, NULL, TRUE,
    0, NULL,NULL,&si,&pi ))
{
    DWORD dwErrNo=GetLastError();
    if (dwErrNo==2)
        MessageBox(NULL,"File not found",NULL,MB_OK);
}
else { ... }
return 0


Жду завершения потока:
do ;
while (!AtlWaitWithMessageLoop( MyThread->m_hThread ));


Так вот, если выполняется MessageBox,
то AtlWaitWithMessageLoop(...) всегда возвращает 0,
хотя поток завершается (смотрел утилитой Process Viewer).
Если же до MessageBox дело не доходит, то все работает нормально.
В чем тут дело?
И вообще, насколько я понял из описания, AtlWaitWithMessageLoop
должен ждать завершения потока или нет?
Alexche
Re: Использование MessageBox в потоке
От: SamUl  
Дата: 23.10.01 09:04
Оценка:
Здравствуйте Alexche, Вы писали:

A>Жду завершения потока:

A>
A>do ;
A>while (!AtlWaitWithMessageLoop( MyThread->m_hThread ));
A>


Если надо просто подождать завершения потока, лучше использовать так:
AtlWaitWithMessageLoop( MyThread->m_hThread )


A>Так вот, если выполняется MessageBox,

A>то AtlWaitWithMessageLoop(...) всегда возвращает 0,
A>хотя поток завершается (смотрел утилитой Process Viewer).
A>Если же до MessageBox дело не доходит, то все работает нормально.
A>В чем тут дело?
AtlWaitWithMessageLoop(...) возвращает FALSE, скорее всего потому, что MyThread->m_hThread не является валидным хендлом на момент проверки. Проиходит это при завершении потока, если CWinThread::m_bAutoDelete выставлен в TRUE (AfxBeginThread так и делает).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.