Подтвердить что ты не робот

Как работают слушатели событий?

Повторно ли они проверяют условие и выполняются, если условие выполнено. Например, как OS точно знает, когда подключено устройство USB, или как MSN точно знает, когда вы получаете электронное письмо. Как это работает?

Спасибо

4b9b3361

Ответ 1

На низком уровне ядро ​​ОС "знает", когда что-то происходит, потому что рассматриваемое устройство отправляет CPU аппаратное прерывание.

Итак, когда, скажем, поступает сетевой пакет, сетевой контроллер отправляет прерывание, а ядро ​​ОС отвечает соответствующим образом.

На программном уровне он работает совершенно по-другому: большинство прикладных программ запускают "цикл событий", где они извлекают сообщение (скажем, сообщение из ОС, говорящее, что "мышь была нажата на эту точку приложения",), выполните соответствующие действия в ответ на это, а затем прослушайте больше сообщений. Если сообщения нет, ОС спит поток, пока не будет отправлено сообщение.

Ответ 2

Зависит.

Часто прослушиватель событий регистрируется объектом, который генерирует событие. Когда происходит событие, объект выполняет итерацию через всех зарегистрированных слушателей, информируя их о событии. Посмотрите пример модели AWT/Swing в Java, например.

ow OS точно знает, когда он получает USB

На низком уровне я подозреваю, что это аппаратный interupt (кто-то меня исправит, если я ошибаюсь), который обрабатывается драйвером kernel/USB. Часто существуют системы более высокого уровня (например, DBUS), которые слушают это и прослушивают прослушиватели событий.

или как MSN точно знает, когда вы получаете электронное письмо.

Я подозреваю, что простой случай опроса почтового ящика (например, через POP3) каждые х секунд и проверки количества сообщений (может быть, ошибочно).

Анон. объясняет разницу между аппаратными прерываниями и событиями уровня программного обеспечения, которые прослушиваются достаточно хорошо.

Ответ 3

Взгляните на Прерывания, это должно объяснить, как аппаратное обеспечение инициирует определенные "события"

Ответ 4

Программы, такие как проверки электронной почты, обычно будут запускать фоновые службы, которые запрашивают свой почтовый сервер каждый X-период, проверяя новую почту. Есть и другие способы сделать это, но для событий уровня программного обеспечения это почти наверняка будет чем-то вроде этого.