Ho un ciclo di eventi che è in attesa di diversi eventi di reset automatico. Gli eventi sono stati tutti inizializzati nell'array eventHandles_
con CreateEvent(NULL, false, false, NULL)
.WaitForMultipleObjects() reimposta tutti gli eventi di reset automatico?
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...
}
}
La mia domanda: se l'evento 1 e 2 si verificano contemporaneamente, il ciclo elaborerà WAIT_OBJECT_0 + 1
perché è primo. Ma l'evento 2 rimarrà segnalato quando il ciclo si ripresenta? O viene ripristinato automaticamente?
In generale, è meglio cercare di evitare tali costrutti. Avrei ogni thread di segnalazione spingere un indice adatto, delegare o qualsiasi cosa su una coda thread-safe e segnalare un singolo semaforo. Questo disegna attorno al problema - il comportamento è del tutto noto e prevedibile, nessun evento andrà mai perso anche se un thread segnala più di una volta, non c'è una restrizione di 64 handle e il numero di thing di segnalazione non è fisso in fase di compilazione. –