WaitForMultipleObjects 不等待

Posted

技术标签:

【中文标题】WaitForMultipleObjects 不等待【英文标题】:WaitForMultipleObjects is not Waiting 【发布时间】:2016-10-09 01:43:01 【问题描述】:

我有一个函数应该通过将命令传递给 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;

【问题讨论】:

每次调用你的函数时列表中有多少个进程? @conio 目前每次通话只有两个。 @conio 我忘了提一些关于等待的细节。我在问题的引用中添加了它们。当我结束第一组中的一个进程时,第二批启动。 您没有检查CreateProcess 调用的进程句柄,并且由于您没有正确引用命令行的应用程序路径名,因此无法创建进程不仅仅是理论上的可能性。 【参考方案1】:

正如 IInspectable 引导我发现的那样,CreateProcess 调用未能创建进程,但我仍在将句柄添加到向量中。我将其更改为仅在 CreateProcess 返回与 TRUE 的等效值时将句柄添加到向量。

【讨论】:

以上是关于WaitForMultipleObjects 不等待的主要内容,如果未能解决你的问题,请参考以下文章

WaitHandle.WaitAny 匹配 WaitForMultipleObjects 功能

在 WaitForMultipleObjects 窗口中等待可变数量的事件

WaitForMultipleObjects的使用问题

WaitForMultipleObjects 到底啥意思,啥作用

MFC线程操作 WaitForMultipleObjects返回值

waitformultipleobjects 具有未知数量的句柄