При освобождении события со сбросом вручную из состояния ожидания могут выйти одновременно несколько потоков.
Пример. Один поток считывает, другой эти данные обрабатывает.
ResetEvent(…) – переводит в состояние non-signaled.
SetEvent(…) – переводит в свободное состояние signaled.
Поток перед считыванием с помощью функции ResetEvent(…) переводит в занятое состояние, считывает и освобождает с помощью SetEvent(…). Остальные потоки ждут с помощью функции WaitForSingleObject(…).