Здравствуйте Андрей Тарасевич, Вы писали:
AM>>AM>>bManualReset
AM>>[in] Specifies whether a manual-reset or auto-reset event object is created.
AM>> If TRUE, then you must use the ResetEvent function to manually reset the state to nonsignaled.
AM>> If FALSE, the system automatically resets the state to nonsignaled
AM>> after a single waiting thread has been released.
AM>>
AM>>Собственно вопрос — что значит a single waiting thread has been released?
AM>>Значит ли это то, что такой event сбросится сразу после завершения функции WaitForSingleObject с кодом возврата WAIT_OBJECT_0 или сброс произойдет только после того, как завершится нитка, в которой был вызов WaitForSingleObject?
АТ>Событие сбросится еще до завершения функции 'WaitForSingleObject'. Вся идея состоит в том, что в ситуации, когда сразу несколько потоков ожидают события с автоматическим сбросом и это событие устанавливается, то только один из этих ожидающих потоков дождется этого события (неизвестно, какой) и продолжит работу, а остальные потоки и не заметят того, что событие устанавливалось, и продолжат ожидание. Если же событие имеет ручной сброс, то все ожидающие потоки дождутся события и продолжат работу.
Да, в доке написано имеено так...
АТ>Недостаточно информации.
Что нужно дополнить, ибо интересно разобраться, почему у меня wait на второй и следующий разы вываливается раньше, чем завершится нитка (какбуд-то ивент не сбрасывается) — ставил точки останова. Ежели закомментировать мой SetEvent(), то wait проваливается только по таймауту.
Кстати, такое поведение и в релизном билде.
АТ>Кстати, если нужно дождаться просто завершения потока, то можно делать ожидание прямо на хэндле потока. Не надо заводить никаких дополнительных событий.
Спасибо за информацию, сейчас погляжу доку.