首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaitForMultipleObjects没在等

WaitForMultipleObjects没在等
EN

Stack Overflow用户
提问于 2016-10-09 01:43:01
回答 1查看 615关注 0票数 0

我有一个函数,它应该通过向CreateProcess传递一个命令来启动一组进程。我连续两次调用这个函数,但是在第一个组的进程完成之前,函数就会退出并第二次被调用。

它似乎只等待其中一个进程退出。当我关闭第一组进程中的一个应用程序时,将启动下一批程序。

我正在使用它一起启动一组应用程序,并在所有这些进程退出时启动下一个应用程序组。为什么我的WaitForMultipleObjects调用不等待组中的所有进程退出?

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-10-09 18:04:34

当IInspectable引导我找到时,CreateProcess调用未能创建流程,但我仍在向向量中添加句柄。如果CreateProcess将等效值返回为TRUE,则将其更改为只向向量添加句柄。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39939127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档