Dado: llené una serie de identificadores con eventos de restablecimiento automático y los pasaré a WaitForMultipleObjects con bWaitAll = FALSE.Comportamiento de WaitForMultipleObjects cuando múltiples identificadores señalan al mismo tiempo
De MSDN: "Cuando bWaitAll es FALSO, esta función comprueba los controladores en la matriz en orden comenzando con el índice 0, hasta que se señala uno de los objetos. Si se señalan varios objetos, la función devuelve el índice del primer identificador de la matriz cuyo objeto fue señalado. "
Entonces, ahora si hay múltiples objetos de señal, obtendré el índice del primero. ¿Tengo que hacer un bucle en mi matriz para ver si hay otros señalados?
Ahora mismo tengo un bucle que es a lo largo de las líneas de:
For (; ;)
{
WaitForMultipleObjects(…)
If (not failed)
Process object that called.
Remove the handle that signaled from the array.
Compact the arrary.
}
Esta es efectivamente la solución utilizada. La clave que necesitaba saber era "si se señalaran varios objetos, se seguirán señalando cuando vuelvas". Si no tengo que preocuparme por la inanición, entonces mi solución original estaba bien. – Chris
Sí. WaitForMultipleObjects() escanea el conjunto de identificadores de 0 en adelante y lo devuelve tan pronto como encuentra un identificador señalado. Solo ese primer asa encontrada se restablece al estado no señalado; los otros están intactos –