Как работают слушатели событий?
Повторно ли они проверяют условие и выполняются, если условие выполнено. Например, как OS точно знает, когда подключено устройство USB, или как MSN точно знает, когда вы получаете электронное письмо. Как это работает?
Спасибо
Ответы
Ответ 1
На низком уровне ядро ОС "знает", когда что-то происходит, потому что рассматриваемое устройство отправляет CPU аппаратное прерывание.
Итак, когда, скажем, поступает сетевой пакет, сетевой контроллер отправляет прерывание, а ядро ОС отвечает соответствующим образом.
На программном уровне он работает совершенно по-другому: большинство прикладных программ запускают "цикл событий", где они извлекают сообщение (скажем, сообщение из ОС, говорящее, что "мышь была нажата на эту точку приложения",), выполните соответствующие действия в ответ на это, а затем прослушайте больше сообщений. Если сообщения нет, ОС спит поток, пока не будет отправлено сообщение.
Ответ 2
Зависит.
Часто прослушиватель событий регистрируется объектом, который генерирует событие. Когда происходит событие, объект выполняет итерацию через всех зарегистрированных слушателей, информируя их о событии. Посмотрите пример модели AWT/Swing в Java, например.
ow OS точно знает, когда он получает USB
На низком уровне я подозреваю, что это аппаратный interupt (кто-то меня исправит, если я ошибаюсь), который обрабатывается драйвером kernel/USB. Часто существуют системы более высокого уровня (например, DBUS), которые слушают это и прослушивают прослушиватели событий.
или как MSN точно знает, когда вы получаете электронное письмо.
Я подозреваю, что простой случай опроса почтового ящика (например, через POP3) каждые х секунд и проверки количества сообщений (может быть, ошибочно).
Анон. объясняет разницу между аппаратными прерываниями и событиями уровня программного обеспечения, которые прослушиваются достаточно хорошо.
Ответ 3
Взгляните на Прерывания, это должно объяснить, как аппаратное обеспечение инициирует определенные "события"
Ответ 4
Программы, такие как проверки электронной почты, обычно будут запускать фоновые службы, которые запрашивают свой почтовый сервер каждый X-период, проверяя новую почту. Есть и другие способы сделать это, но для событий уровня программного обеспечения это почти наверняка будет чем-то вроде этого.