Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WaitForMultipleObjects失败c++;_C++_Multithreading_Winapi_Concurrent Programming - Fatal编程技术网

C++ WaitForMultipleObjects失败c++;

C++ WaitForMultipleObjects失败c++;,c++,multithreading,winapi,concurrent-programming,C++,Multithreading,Winapi,Concurrent Programming,我目前正在编写一个程序,它将同时在组中运行多个程序,其他程序将自己运行 if(WAIT_FAILED==WaitForMultipleObjects(numberOfProgramsRan,&information[i].hProcess,TRUE,INFINITE)){ wcerr请确保您正在传递指向句柄数组的指针(请参阅)。我不知道信息[I].hProcess是什么,但它看起来像是包含在结构/类中的单个句柄成员。虽然如果它是单个句柄,我希望它只与1个进程一起工作,而不是与您提到的2个进程一

我目前正在编写一个程序,它将同时在组中运行多个程序,其他程序将自己运行


if(WAIT_FAILED==WaitForMultipleObjects(numberOfProgramsRan,&information[i].hProcess,TRUE,INFINITE)){

wcerr请确保您正在传递指向句柄数组的指针(请参阅)。我不知道
信息[I].hProcess
是什么,但它看起来像是包含在结构/类中的单个句柄成员。虽然如果它是单个句柄,我希望它只与1个进程一起工作,而不是与您提到的2个进程一起工作


显示
信息的定义以及您在此处初始化/创建流程的方式可能会有所帮助,也可能会将代码减少到仍然会再现问题的最小大小。此外,“it失败”的详细信息可能会有所帮助(错误/异常消息、发生的情况等).

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


显示
信息的定义以及您在此处初始化/创建流程的方式可能会有所帮助,还可以将代码减少到仍然会再现问题的最小大小。关于“它失败”的详细信息可能会有所帮助(错误/异常消息、发生的情况等)。

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

&information[i].hProcess
应该是指向包含
numberOfProgramsRan
元素的
HANDLE
s数组的第一个元素的指针。根据您的描述,情况似乎并非如此,因此我不知道您认为它应该如何工作。

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

WaitForMultipleObjects(1, &information[i].hProcess, TRUE, INFINITE)
如果您使用的不是1,请查看流程信息的定义:

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);
handlehprocess[MAX_processs];

对于(int i=0;i如果您只在单个进程(索引i)上等待,则应使用WaitForSingleObject。如果您在多个进程上等待,则需要像其他人所说的那样传递句柄数组,而不是指向进程信息的指针。 如果坚持将WaitFoRmultipleObjects用于单个对象,请使用:

WaitForMultipleObjects(1, &information[i].hProcess, TRUE, INFINITE)
如果您使用的不是1,请查看流程信息的定义:

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);
handlehprocess[MAX_processs];

对于(int i=0;我看过
GetLastError()
的结果了吗?我不希望
和信息[i].hProcess
是正确的。你能给我们看一下
信息的声明吗
处理信息pi={0};信息。推回(pi);然后我使用信息[i]在创建中插入piprocess@Johnston如果是这种情况,numberOfProgramsRan应该永远只有1,因为只有一个信息[i]。hProcess@nos我循环它以在向量中的所有进程上运行。您是否查看了
GetLastError()
的结果?我不希望
&information[i].hProcess
是否正确。能否向我们展示
信息的声明
?PROCESS_information pi={0};information.push_back(pi);然后在创建中使用信息[i]insead piprocess@Johnston如果是这种情况,numberOfProgramsRan应该永远只有1,因为只有一个信息[i].hProcess@nos我循环它在向量
&hProcess[0]
中的所有进程上运行?真的吗?只需说
hProcess
。很好地解释了为什么2会工作……因为它同时等待进程和线程。
&hProcess[0]
?真的吗?只需说
hProcess
。很好地解释了为什么2看起来可以工作……因为它同时等待进程和线程。