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