我有一个函数应该通过将命令传递给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 :(得分:0)
正如IInspectable引导我发现的那样,CreateProcess调用无法创建进程,但我仍然在向量中添加句柄。如果CreateProcess将等效值返回到TRUE,我将其更改为仅向向量添加句柄。