Выполнение внутреннего цикла сообщений - довольно тривиальное кодирование.
Все, что показано ниже, это все:
EnableWindow(FALSE);
while ( /* check for my exit condition */ )
{
MSG msg;
if(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if( !AfxGetApp()->PumpMessage() )
{
::PostQuitMessage(0);
}
}
}
EnableWindow(TRUE);
Чтобы дождаться завершения процесса, вы можете использовать очень короткий (<30 мс) тайм-аут<code>WaitForSingleObject вызов в цикле сообщений.Или MsgWaitForMultipleObjects
.Или GetExitCodeProcess
.
Я хотел бы рекомендовать другой подход.
1) Показать новое модальное всплывающее окно
2) Запустить процесс в обработчике OnInitDialog и запустить таймер
3) Проверитьесли процесс все еще выполняется в обработчике OnTimer, GetExitCodeProcess
4) Вызвать EndDialog, когда процесс больше не выполняется