Смысл использования события в уведомлении одного или нескольких ожидающих потоков. События бывают двух типов:
Разница в том, что первый вид события нужно применять если событие ждут несколько потоков. Только сброс в ручную поволяет это сделать. Иначе первый же обработчик сбросит событие и другие потоки об этом не узнают. Реализуется это так. Объявляется переменная события типа HANDLE. Для создания события используется функция CreateEvent(), для доступа OpenEvent(), для установки события две функции SetEvent() и PulseEvent(). Для сброса события используется функция ResetEvent(). Дескриптор события после окончания работы нужно закрыть. Объект событие может находиться в двух состояниях - занят и свободен. Картинка ниже показывает смысл события с ручным сбросом.
А вот, что будет с автоматическим сбросом в той же самой ситуации.