WaitForMultipleObjects не ожидает

У меня есть функция, которая должна запускать группу процессов, передавая команду CreateProcess. Я вызываю эту функцию два раза последовательно, но каким-то образом функция завершается и вызывается во второй раз, прежде чем процессы из первой группы будут завершены.

Кажется, что ожидается только один из процессов для выхода. Следующая партия
запускается, когда я закрываю одно из приложений из первой группы
процессов.

Я использую его для запуска группы приложений вместе и запуска следующей группы после завершения всех этих процессов. Почему мой WaitForMultipleObjects вызов не ждет завершения всех процессов в группе?

void ProcessLauncher::launch_processes(PROCESS_LIST_TYPE& processes)
{
unsigned long const CP_MAX_COMMANDLINE = 32768;
VECTOR_TYPE<PROCESS_INFORMATION> procs;
VECTOR_TYPE<HANDLE> pHandles;

for (auto proc : processes)
{
STRING_TYPE command = proc.program_name + L" " + proc.params;
STARTUPINFO sinfo = { 0 };
sinfo.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi = { 0 };
try {
CHAR_TYPE* commandline = new CHAR_TYPE[CP_MAX_COMMANDLINE];
wcsncpy_s(commandline, CP_MAX_COMMANDLINE, command.c_str(), command.size() + 1);
CreateProcess(nullptr,
commandline,
nullptr,
nullptr,
false,
0,
nullptr,
nullptr,
&sinfo,
&pi);

delete[]commandline;

CloseHandle(pi.hThread);

procs.push_back(pi);
pHandles.push_back(pi.hProcess);
}
catch (std::bad_alloc&) {
std::wcerr << L"Insufficient memory to launch application" << std::endl;
return;
}
}

if (WAIT_FAILED == WaitForMultipleObjects(pHandles.size(), pHandles.data(), TRUE, INFINITE))
std::wcout << L"Failure waiting for process to terminate" << std::endl;
}

0

Решение

Поскольку IInspectable привел меня к поиску, вызов CreateProcess не смог создать процесс, но я все еще добавлял дескрипторы к вектору. Я изменил его, чтобы добавить маркеры в вектор, только если CreateProcess вернул эквивалентное значение в TRUE.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector