Вы пробовали WaitForSingleObject()
с параметром dwMilliseconds
равным 0? WaitForSingleObject()
немедленно вернется, если dwMilliseconds
равно 0, и вернет WAIT_TIMEOUT
, если процесс не завершен, или WAIT_OBJECT_0
, если это так.
Пример, предполагая, что дескриптор дочернего процесса равен hProcess
:
DWORD result = WaitForSingleObject(hProcess, 0);
if (result == WAIT_TIMEOUT)
/* Process not dead */;
else if (result == WAIT_OBJECT_0)
/* Process dead */;
else
/* Error occured */;
И альтернатива GetExitCodeProcess()
. Возвращенный им «код выхода» будет STILL_ACTIVE
, если он все еще работает, в противном случае он вернет фактический код выхода.
Пример, снова предполагая, что дескриптор дочернего процесса равен hProcess
:
DWORD exitCode;
if (!GetExitCodeProcess(hProcess, &exitCode))
/* Error occured */;
else if (exitCode == STILL_ACTIVE)
/* Process is still running */
else
/* exitCode now contains the process exit code, and the process is not running anymore */;
Оба эти примера неблокирующие