Запускаю поток, в котором есть такие строки:
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, Вы писали:
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 так и делает).