首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++出现故障的WaitForMultipleObjects

c++出现故障的WaitForMultipleObjects
EN

Stack Overflow用户
提问于 2011-05-29 06:39:00
回答 3查看 2K关注 0票数 1

我目前正在编写一个程序,它将运行多个程序在组中所有一次和其他人自己。

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

numberOfProgramsRan是我在循环中运行的程序的数量。&information[i]是一个vector,用于保存创建进程中的进程信息

当我在for循环中创建进程时,如果创建了两个或更少的进程(因此传入了两个要运行的程序),程序将在运行下一个进程之前等待。如果创建两个以上的进程(或者在我的向量中传入两个以上的程序),我的WaitForMultipleObjects就会失败。

如果我需要进一步解释我的问题,请让我知道。

谢谢你的帮忙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-29 07:10:21

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

代码语言:javascript
复制
WaitForMultipleObjects(1, &information[i].hProcess, TRUE, INFINITE)

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

代码语言:javascript
复制
typedef struct _PROCESS_INFORMATION {
  HANDLE hProcess;
  HANDLE hThread;
  DWORD  dwProcessId;
  DWORD  dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;

然后,以下dwProcessId和dwThreadID将被错误地视为处理您的呼叫将不会按预期工作。

类似于:

代码语言:javascript
复制
HANDLE hProcess[MAX_PROCESSES];
for(int i=0; i<numberOfProgramsRan; i++)
{
  hProcess[i] = information[i].hProcess;
}
WaitForMultipleObjects(numberOfProgramsRan, hProcess, TRUE, INFINITE);

将等待您的所有进程。

票数 5
EN

Stack Overflow用户

发布于 2011-05-29 06:50:24

&information[i].hProcess应指向包含numberOfProgramsRan元素HANDLE数组的第一个元素。根据您的描述,这听起来不像是这样的,所以我不知道您认为它应该如何工作。

票数 3
EN

Stack Overflow用户

发布于 2011-05-29 06:49:36

确保您传入的是指向句柄数组的指针(请参阅official documentation)。我不知道information[i].hProcess是什么,但它看起来像是包含在结构/类中的单个句柄成员。尽管如果它是一个单一的句柄,我希望它只能处理1个进程,而不是你提到的2个进程。

在这里展示information的定义以及如何初始化/创建进程可能会有所帮助,还可以将代码减少到最小大小,从而仍然会重现该问题。此外,有关"it fails“的详细信息可能会有所帮助(错误/异常消息,发生了什么,等等)。

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

https://stackoverflow.com/questions/6164775

复制
相关文章

相似问题

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