Вызов функции WaitForSingleObject не ясен в сочетании с CreateProcess

Я наткнулся на следующий код в программе, которая отслеживает процессы:

void StartProcess(const std::wstring& processName, const CString& argument)
{
...
STARTUPINFO         stInfo;
PROCESS_INFORMATION prInfo;
ZeroMemory( &stInfo, sizeof(stInfo) );
stInfo.cb = sizeof(stInfo);
stInfo.dwFlags=STARTF_USESHOWWINDOW;
stInfo.wShowWindow=SW_SHOWDEFAULT;

bRet = CreateProcess(NULL,
(LPTSTR)(LPCTSTR)sCmdline,
NULL,
NULL,
TRUE,
CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS,
NULL,
_T("."),
&stInfo,
&prInfo);

// Create process has gone OK and we have to wait.
if (bRet)
{
bRet = FALSE;
int nRetWait = WaitForSingleObject(prInfo.hProcess,0);

if (nRetWait == WAIT_OBJECT_0)
{
// Get the exit code of the process
DWORD dwExitCode = 0;
::GetExitCodeProcess(prInfo.hProcess, &dwExitCode);
if (0 == dwExitCode)
{
// The program succeeded
m_StartedServices.push_back(prInfo.dwProcessId;);
bRet = TRUE;
}
}
}
}

Код должен начать процесс, а затем на последующем стадионе завершить его (используя m_StartedServices). Однако мне интересно, что добавленной стоимости звонки WaitForSingleObject а также GetExitCodeProcess иметь. Я немного огляделся и кажется, что WaitForSingleObject с таймаутом 0 используется для проверки того, запущен ли еще процесс, но он только что создан, так зачем проверять? И зачем проверять код завершения процесса, который все еще выполняется?

Кто-нибудь может это прояснить?

Также я обнаружил, что звонки:

CloseHandle(prInfo.hThread);
CloseHandle(prInfo.hProcess);

отсутствуют в этой функции. Я обнаружил утечку ручки, или есть какое-то волшебство, которое автоматически закроет ручки?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]