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

Разве они неоднократно проверяют на условие и выполняются, если условие соблюдают. Исключая, как ОС знает точно, когда USB-устройство включается, или как MSN знает точно, когда Вы получаете электронное письмо. Как это работает?

Спасибо

18
задан jmasterx 5 July 2010 в 21:43
поделиться

4 ответа

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

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

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

34
ответ дан 30 November 2019 в 07:17
поделиться

Зависит.

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

Как ОС точно знает, когда получает USB.

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

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

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

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

1
ответ дан 30 November 2019 в 07:17
поделиться

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

1
ответ дан 30 November 2019 в 07:17
поделиться

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

2
ответ дан 30 November 2019 в 07:17
поделиться