реклама на сайте
подробности

 
 
> TEventFlag, Не пойму идеологии :(
gladov
сообщение Nov 11 2010, 09:03
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Объясните плз, почему TEventFlag.Wait() работает по-разному (очищает флаг или нет) в зависимости от того взведен флаг на момент запроса или нет? Я для себя никаких плюсов этого не вижу, а сумятицу в голову (в мою конкретно) вносит. Насколько понял, это сделано для множественной побудки, т.е. если в ожидании уснули вдвоем, то оба и проснутся. Но кто же должен тогда очистить флаг? Оба сразу? А если один из проснувшихся (первый) хочет инициировать новую операцию с новым ожиданием флага, а второй потом проснется и без разбора очистит флаг?

Вообще идея понятна но смущает то, что выйдя из wait() я не знаю, очищен ли уже флаг или нет. А проверять последующим вызовом IsSignaled() уже нельзя, т.к. ее результат может оказаться невалидным, т.к. между wait() и IsSignaled() может что-то произойти, а в критическую секцию их заключить нельзя т.к. возможно ожидание флага от прерывания. Вот и не срастается у меня в голове идеология - как же правильно по задумке автора(ов) работать с флагами?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Nov 11 2010, 13:08
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Идея простая: когда флаг сигналится, это означает, что произошло событие (которое ожидает один [или несколько] процесс[ов]). При этом все ожидающие (процессы) будут переведены из спячки в активное состояние, а управление получат в соответствии со своими приоритетами. Флаг сбрасывает первый из ожидающих (самый приоритетный), но это не отменяет того, что остальные процессы, которые успели встать на ожидание флага до возникновения события, тоже станут активными - т.е. дождавшимися события, которое они хотели.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016