Термінологія
подія : тип речі, що може статися.
Стрільба події : специфічне виникнення події; подія, що відбувається
Слухач подій : Щось, на що дивляться стрілянини подій.
Обробник подій : щось, що відбувається, коли слухач події виявляє запуск події.
Абонент події : відповідь, яку повинен викликати обробник події.
Ці визначення не залежать від реалізації, тому їх можна реалізувати різними способами.
Деякі з цих термінів зазвичай помилково сприймаються як синоніми, оскільки користувачам часто не потрібно розрізняти їх.
Загальні сценарії
Програмно-логічні події.
Подія , коли який - або метод викликається.
Випал події є конкретним викликом до цього методу.
Прослуховувач подій є гак в методі події , який називається на кожному пострілі подій , який викликає обробник події.
Оброблювач подій викликає набір абонентів подій.
Передплатник події (и) виконувати будь-які дії (s) система означає , що станеться у відповідь на виникнення події.
Зовнішні події.
Подія є зовнішнім подією , яке може бути виведено з спостережуваних.
Стрілянина події - це коли те, що зовнішнє подія може бути визнано таким, що стався.
Слухач події як - то виявляє пуски події, часто шляхом опитування спостережної (s), то він викликає обробник події при виявленні події стрільби.
Оброблювач подій викликає набір абонентів подій.
Передплатник події (и) виконувати будь-які дії (s) система означає , що станеться у відповідь на виникнення події.
Опитування проти вставлення гаків у механізм стрільби події
Справа інших, що опитування часто не є необхідним. Це тому, що слухачі подій можуть бути реалізовані, якщо вистріли події автоматично викликають обробник подій, що часто є найефективнішим способом реалізації речей, коли події є подіями на системному рівні.
За аналогією, вам не потрібно щодня перевіряти поштову скриньку, якщо поштовий працівник стукає у ваші двері та передає пошту безпосередньо вам.
Однак слухачі подій також можуть працювати шляхом опитування. Опитування не обов'язково має перевіряти конкретне значення чи інше, що спостерігається; він може бути складнішим. Але в цілому сенс опитування полягає в тому, щоб зробити висновок про те, коли якась подія сталася такою, що на неї можна реагувати.
За аналогією, ви повинні кожен день перевіряти свою поштову скриньку, коли працівник поштового зв’язку просто скидає пошту в неї. Вам не доведеться виконувати цю дільничну роботу, якби ви могли доручити поштовому працівникові постукати у ваші двері, але це часто не є можливим.
Логіка ланцюга подій
У багатьох мовах програмування ви можете записати подію, яка щойно викликається при натисканні клавіші на клавіатурі або в певний час. Хоча це зовнішні події, не потрібно їх опитувати. Чому?
Це тому, що операційна система опитує для вас. Наприклад, Windows перевіряє такі речі, як зміни стану клавіатури, і якщо вона виявить, вона зателефонує абонентам подій. Отже, коли ви підписуєтесь на подію на клавіатурі, ви фактично підписуєтесь на подію, яка сама є підписником на подію, яка опитується.
За аналогією, скажіть, що ви живете в квартирному комплексі, а працівник поштового зв’язку скидає пошту в зону отримання комунальної пошти. Потім працівник, схожий на операційну систему, може перевірити цю пошту для всіх, доставляючи пошту до квартир тих, хто щось отримав. Це позбавляє всіх інших від проблем опитування області надходження пошти.
Моя інтуїція припускає, що слухач події постійно перевіряє, чи подія була звільнена, тобто, за моїм сценарієм, це було б не інакше, ніж перевірка кожного кадру, якщо подію було знято.
Виходячи з дискусії на уроці, здається, що слухач подій працює по-іншому.
Як працює слухач подій?
Як ви підозрювали, подія може діяти шляхом опитування. І якщо подія якимось чином пов’язана із зовнішніми подіями, наприклад, натисканням клавіші клавіатури, опитування має відбутися в якийсь момент.
Так само вірно, що події не обов'язково повинні включати опитування. Наприклад, якщо подія відбувається при натисканні кнопки, то слухач подій цієї кнопки - це метод, який може закликати рамка GUI, коли визначить, що натискання кнопки натискає кнопку. У цьому випадку опитування все ж повинно відбуватися, щоб виявити клацання миші, але слухач миші є більш пасивним елементом, з'єднаним із механізмом примітивного опитування через ланцюжок подій.
Оновлення: на низькому рівні апаратного опитування
Виявляється, що USB-пристрої та інші сучасні протоколи зв'язку мають досить захоплюючий набір мережевих протоколів для взаємодій, що дозволяє пристроям вводу-виводу, включаючи клавіатури та миші, займатися тимчасовими топологіями.
Цікаво, що " переривання " є досить імперативними, синхронними речами, тому вони не обробляють спеціальні топології мереж. Щоб виправити це, " переривання " були узагальнені в асинхронні пакети з високим пріоритетом, які називаються " транзакції переривання " (в контексті USB) або " перерви з сигналізацією повідомлення " (в контексті PCI). Цей протокол описаний у специфікації USB:
- " Малюнок 8-31. Масштабний стан / управління / переривання OUT станції хоста транзакцій " в "Універсальна специфікація послідовних шин, версія 2" , надрукована сторінка-222; PDF-сторінка-250 (2000-04-27)
Суть полягає в тому, що пристрої вводу-виводу та компоненти зв'язку (як USB-концентратори) в основному діють як мережеві пристрої. Отже, вони надсилають повідомлення, що вимагає опитування своїх портів тощо. Це зменшує потребу у виділених апаратних лініях.
Операційні системи , такі як Windows , здається, обробляти сам процес опитування, наприклад , як описано в документації MSDN для USB_ENDPOINT_DESCRIPTOR
«з , який описує , як управляти тим, як часто для Windows опитує контролер USB хост для переривання / ізохронними повідомлень:
bInterval
Значення містить інтервал опитування для переривання і ізохронних кінцевих точок. Для інших типів кінцевої точки це значення слід ігнорувати. Це значення відображає конфігурацію пристрою в прошивці. Водії не можуть його змінити.
Інтервал опитування разом зі швидкістю пристрою та типом хост-контролера визначають частоту, з якою драйвер повинен ініціювати переривання або ізохронну передачу. Значення в bInterval
не відображає фіксовану кількість часу. Це відносне значення, і фактична частота опитування також буде залежати від того, чи працюють пристрій та контролер USB-хоста з низькою, повною або високою швидкістю.
- "Структура USB_ENDPOINT_DESCRIPTOR" , Hardware Dev Center, Microsoft
Нові протоколи підключення монітора, як DisplayPort, схоже, роблять те саме:
Багатопотоковий транспорт (MST)
-Slide # 14 від "DisplayPortTM Ver.1.2 Огляд" (2010-12-06)
Ця абстракція дозволяє отримати деякі акуратні функції, як-от запуск 3 моніторів з одного з'єднання:
Багатопотоковий транспорт DisplayPort також дозволяє з'єднувати три або більше пристроїв разом, але в протилежному, менш орієнтованому на споживача конфігурації: одночасно керувати кількома дисплеями з одного вихідного порту.
- "DisplayPort" , Вікіпедія
У концептуальному сенсі відмовлятись від цього полягає в тому, що механізми опитування дозволяють отримати більш узагальнені послідовні комунікації, що приголомшливо, коли ви хочете отримати більш загальну функціональність. Отже, апаратне забезпечення та ОС проводять багато опитувань для логічної системи. Тоді споживачі, які підписуються на події, можуть насолоджуватися тими деталями, якими обробляє їх система нижчого рівня, без необхідності писати власні протоколи опитування / передачі повідомлень.
Зрештою, такі події, як натискання клавіш, здаються, проходять через досить цікаву серію подій, перш ніж потрапити на імперативний механізм запуску подій програмного рівня.