-1

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

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

我计划做类似的事情:

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

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

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

我可以做这样的事情吗?-

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

waitforsingleobject(threadHandle)

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

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

TIA。阿南德

4

3 回答 3

1

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

于 2013-01-07T05:16:34.667 回答
1

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

于 2013-01-07T09:30:45.940 回答
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 函数

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

于 2013-01-07T09:03:41.117 回答