Re[2]: Auto Reset Event
От: AMurchick  
Дата: 24.10.02 04:15
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

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 проваливается только по таймауту.
Кстати, такое поведение и в релизном билде.

АТ>Кстати, если нужно дождаться просто завершения потока, то можно делать ожидание прямо на хэндле потока. Не надо заводить никаких дополнительных событий.

Спасибо за информацию, сейчас погляжу доку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.