Tengo un bucle de evento que está esperando en varios eventos de restablecimiento automático. Todos los eventos se inicializaron en la matriz eventHandles_
con CreateEvent(NULL, false, false, NULL)
.¿WaitForMultipleObjects() restablece todos los eventos de restablecimiento automático?
while (true)
{
DWORD waitResult = WaitForMultipleObjects(3, eventHandles_, false, INFINITE);
switch (waitResult)
{
case WAIT_OBJECT_0 + 0:
//handle event...
case WAIT_OBJECT_0 + 1:
//handle event...
case WAIT_OBJECT_0 + 2:
//handle event...
}
}
Mi pregunta: si el evento 1 y 2 ocurren simultáneamente, el bucle procesará WAIT_OBJECT_0 + 1
porque es primero. ¿Pero el evento 2 permanecerá señalizado cuando el ciclo vuelva a aparecer? ¿O se restablece automáticamente?
En general, es mejor tratar de evitar tales construcciones. Me gustaría que cada hilo de señalización insertara un índice adecuado, delegue o lo que sea en una cola segura para hilos y señale un solo semáforo. Esto se diseña en torno al problema: el comportamiento es totalmente conocido y predecible, ningún evento se perderá jamás, incluso si un hilo se señaliza más de una vez, no hay restricciones de 64 manejadores y el número de puntos de señalización no está fijo en tiempo de compilación. –