WaitForMultipleObjects

WaitForMultipleObjects

我目前正在编写一个程序,该程序将同时在多个组中运行多个程序,而其他程序则可以自己运行。
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);

将等待您的所有过程。

07-25 20:29