gpt4 book ai didi

multithreading - 当多个句柄同时发出信号时 WaitForMultipleObjects 的行为

转载 作者:行者123 更新时间:2023-12-03 00:34:47 25 4
gpt4 key购买 nike

假设:我用自动重置事件填充了一个句柄数组,并使用 bWaitAll = FALSE 将其传递给 WaitForMultipleObjects。

来自 MSDN:“当 bWaitAll 为 FALSE 时,该函数从索引 0 开始按顺序检查数组中的句柄,直到其中一个对象收到信号为止。如果多个对象收到信号,该函数将返回其对象收到信号的数组中第一个句柄的索引。”

所以,现在如果有多个对象发出信号,我将获得第一个对象的索引。我是否必须循环遍历我的数组才能查看是否有其他人发出信号?

现在我有一个循环:

For ( ; ; )
{
WaitForMultipleObjects(…)
If (not failed)
Process object that called.
Remove the handle that signaled from the array.
Compact the arrary.
}

最佳答案

So, now if multiple objects signal I’ll get the index of the first one. Do I have to loop though my array to see if any others have signaled?

为什么不直接返回到 Wait() 呢?如果多个对象发出信号,当您回来时它们仍然会收到信号。当然,如果等待对象数组中有一个非常快速触发的第一个对象,它会使其他对象挨饿;您要做的就是按触发频率对等待对象数组中的对象进行排序,最不频繁的位于第一个。

顺便说一句,当你使用无限的 for() 时,你可以使用 goto。如果您确实不离开循环,则无条件 goto 最能准确地表达您的意图。

关于multithreading - 当多个句柄同时发出信号时 WaitForMultipleObjects 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com