等待句柄数未知的formultipleobjects
waitformultipleobjects with unknown number of handles
这就是我需要做的-1. 定义一个句柄threadHandle并定义一个句柄数组h[20]…其中数组中的每个条目都有一个值threadHandle。
- 我的代码打开了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)
- 没有找到相关文章