等待句柄数未知的formultipleobjects

waitformultipleobjects with unknown number of handles

本文关键字:formultipleobjects 未知 句柄 等待      更新时间:2023-10-16

这就是我需要做的-1. 定义一个句柄threadHandle并定义一个句柄数组h[20]…其中数组中的每个条目都有一个值threadHandle。

  1. 我的代码打开了20个线程,一旦完成,每个线程必须向主线程发出信号,一旦它们全部发出信号,主线程必须将一些东西记录到日志文件中。

我打算这样做:

定义threadHandle和上面定义的句柄h[20}数组。

当代码打开20个线程时,执行- waitformultipleobjects(NULL,20,h,true,10000)

现在,代码将等待h数组中的所有句柄在等待返回之前被设置。但是因为h的所有值都是相同的,所以wait函数返回一个错误。有办法绕过这个吗?我基本上需要所有的线程都给调用线程回信号…为20个线程中的每一个定义20个处理程序似乎也不是一个好主意。

我可以这样做吗?-

定义threadHandle和句柄数组h[20]。为返回给主线程发出信号的线程数维护一个变量计数。

waitforsingleobject(threadHandle)

一旦返回,增加count和if count <20重复执行上述等待语句。继续这样做,直到count = 20,然后记录到文件中。当然,如果其中任何一个等待超时,那么我们将失败记录到日志文件中。

我正在尝试这个,但不知道是否有更好的方法来做到这一点。

TIA。anand

创建20个Event对象。把他们的把手放进h。将一个传递给创建的每个线程。当线程需要向父线程发送信号时,它会向该事件发送信号。父进程等待事件句柄,当它们都发出信号时,它将写入日志。

使用一个信号量代替,(参见CreateSemaphore() API,计数初始化为0),所有线程发出信号。WaitForSingleObject在for循环中,计数到20。更容易设置,不会错过任何事件,并且可以为任意数量的线程工作(在合理的范围内)。

Maintain a variable count for the number of threads。是的,你可以这样做。

nCount The number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS. This parameter cannot be zero.

nCount是而不是指定数组大小,而是要等待的句柄数。但是,它不能超过数组的大小,而且两者都不能超过MAXIMUM_WAIT_OBJECTS。

提示:这并不限于特定的句柄,如线程句柄。您可以通过这种方式处理各种可等待句柄的混合。(MSDN WaitForMultipleObjects函数)

But since all the values of h are the same... ,它们不相同,WaitForMultipleObjects的返回值会相应变化(WAIT_OBJECT_0 + nCount)

相关文章:
  • 没有找到相关文章