如何在超过64个句柄上实现waitAny?

时间:2012-01-31 16:30:23

标签: c# multithreading

如何在超过64个句柄上实现waitAny

我有一个简单的问题,我有很多线程工作直到数据结束,当线程是数据结束然后发信号通知我运行这个waitAny的空闲线程并给他下一个数据包。< / p>

3 个答案:

答案 0 :(得分:5)

您可能需要考虑为'waitAny'线程等​​待通知数据包的队列。当您的众多线程中的一个完成它的操作时,它会在队列中放置一个通知数据包。您的waitAny会在单个事件上变成等待,表示队列中有某些内容。

答案 1 :(得分:3)

使用其他线程实现级联等待以等待WaitHandles包,并在层次结构上发出信号。

或者在没有实际等待的情况下以批量测试它们(没有设置超时)

答案 2 :(得分:1)

有效等待受API MAXIMUM_WAIT_OBJECTS限制为64.除了重新设计您的应用程序以使用更少的句柄之外,您可以切换到轮询模式(等待每个64分别使用零超时,并等待如果没有信号通知所有句柄,则返回小的非零数量),或拆分对象并在多个执行线程之间等待。

您可能还想重温之前的讨论,例如