Mam pętlę zdarzeń, która czeka na kilka zdarzeń automatycznego resetowania. Wszystkie zdarzenia zostały zainicjowane w tablicy eventHandles_
z CreateEvent(NULL, false, false, NULL)
.Czy funkcja WaitForMultipleObjects() resetuje wszystkie zdarzenia automatycznego resetowania?
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...
}
}
Moje pytanie: czy zdarzenie 1 i 2 występują jednocześnie, pętla będzie przetwarzać WAIT_OBJECT_0 + 1
bo to pierwszy. Ale czy zdarzenie 2 pozostanie zasygnalizowane, gdy pętla znów się pojawi? Czy to się automatycznie resetuje?
Ogólnie rzecz biorąc, najlepiej jest unikać takich konstrukcji. Chciałbym, aby każdy wątek sygnalizacyjny naciskał odpowiedni indeks, delegat lub cokolwiek na kolejkę wątkową i sygnalizował pojedynczy semafor. Projektuje wokół problemu - zachowanie jest całkowicie znane i przewidywalne, żadne zdarzenia nigdy nie zostaną utracone, nawet jeśli jeden wątek sygnalizuje więcej niż jeden raz, nie ma ograniczenia dotyczącego 64-uchwytów, a liczba sygnalizatorów nie jest ustalona podczas kompilacji. –