waitformultipleobjects具有未知数量的句柄

时间:2013-01-07 05:09:47

标签: c++ windows multithreading

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

  1. 我的代码打开了20个线程,一旦完成,每个线程都必须发出主线程信号,一旦所有线程发出信号,主线程必须将某些内容记录到日志文件中。
  2. 我打算做以下事情:

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

    看到代码打开20个主题,执行 - waitformultipleobjects(NULL,20,h,true,10000)

    现在代码将等待在等待返回之前设置h数组中的所有句柄。但由于h的所有值都相同,因此wait函数会返回错误。有办法解决这个问题吗?我基本上需要所有的线程来回复调用线程...为20个线程中的每一个定义20个处理程序似乎也不是一个好主意。

    我可以这样做吗? -

    定义threadHandle和句柄数组h [20]。 保持发送回主线程的线程数的变量计数。

    waitforsingleobject(threadHandle)
    

    一旦返回,增量计数和if count< 20重复上述等待声明。 继续这样做直到count = 20,然后登录到文件。 当然,如果任何等待超时之间,那么我们将失败记录到日志文件中。

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

    TIA。 阿南德

3 个答案:

答案 0 :(得分:1)

创建20个事件对象。将他们的句柄放入h。将一个传递给您创建的每个线程。当线程需要向父节点发信号时,它会发出该事件的信号。父级等待事件句柄,当它们全部发出信号时,它会写入日志。

答案 1 :(得分:1)

使用一个信号量,(参见CreateSemaphore()API,count初始化为0),即所有线程都发出信号。 for循环中的WaitForSingleObject,最多可计数20个。设置起来容易得多,不会错过任何事件,并且可以适用于任意数量的线程,(在合理范围内)。

答案 2 :(得分:0)

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 function

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