gpt4 book ai didi

c++ - WaitForMultipleObjects 失败 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:37 32 4
gpt4 key购买 nike

我目前正在编写一个程序,该程序将同时运行多个程序组和其他程序。


if( WAIT_FAILED == WaitForMultipleObjects(numberOfProgramsRan, &information[i].hProcess, TRUE, INFINITE) ) {
wcerr << L"Failure waiting for process" << endl;
}

numberOfProgramsRan是我在循环中运行的程序数。 &information[i]vector从创建过程中保存我的过程信息

当我在 for 循环中创建进程时,如果创建了两个或更少的进程(因此两个程序被传入运行),我的程序将等待,然后再运行我的下一个进程。 如果创建两个以上的进程(或在我的 vector 中传入两个以上的程序)我的 WaitForMultipleObjects它失败。

如果我需要进一步解释我的问题,请告诉我。

谢谢你的帮助

最佳答案

如果您只等待一个进程(索引 i),您应该使用 WaitForSingleObject。如果您正在等待多个进程,您需要像其他人所说的那样传入一个句柄数组——而不是指向 PROCESS_INFORMATION 的指针。如果您坚持对单个对象使用 WaitFoRmultipleObjects,请使用:

WaitForMultipleObjects(1, &information[i].hProcess, TRUE, INFINITE)

如果您使用 1 以外的任何值,请查看 PROCESS_INFORMATION 的定义:

typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;

随后的 dwProcessId 和 dwThreadID 将被错误地视为句柄,您的调用将无法按预期工作。

类似于:

HANDLE hProcess[MAX_PROCESSES];
for(int i=0; i<numberOfProgramsRan; i++)
{
hProcess[i] = information[i].hProcess;
}
WaitForMultipleObjects(numberOfProgramsRan, hProcess, TRUE, INFINITE);

将等待您的所有进程。

关于c++ - WaitForMultipleObjects 失败 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164775/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com