Загалом, як працюють обробники подій?


14

Це загальна тема, як працюють обробники подій?

Це означає, що за лаштунками - що відбувається, коли вони створені.

У мене є груба ідея - але я хотів би, щоб це було підтверджено.



Блискуча, картина спостерігача - це те, що я знайшов: я прочитав в Інтернеті про цю проблему і прочитав хороший документ на тему програмування, керованого подіями. У цьому документі він обговорює процес моделювання дизайну обробників. Таким чином, у вас є пара подій, які надходять до диспетчера, який потім приймає цю подію та аналізує її, щоб визначити тип її події, а потім надсилає кожну подію обробнику, який може обробляти події цього типу.
JHarley1

1
Він пояснює, як диспетчер це нескінченний цикл, який зупиняється лише тоді, коли (наприклад, із додатком GUI) програма закрита. І тоді, як у вас є шаблон спостерігача (або шаблон публікації / підписки), який широко використовується для програмування, керованого подіями в рамках графічного інтерфейсу, і як це працює на голлівудському принципі "не дзвоніть нам, ми зателефонуємо вам" .
JHarley1

Ви б сказали, що вищезазначене пояснення є адекватним?
JHarley1

Це залежить. Для огляду високого рівня це добре. Однак для вичерпного та ґрунтовного пояснення хека немає. Зрозуміло, таке пояснення, ймовірно, буде багато сторінок роботи, оскільки це може бути досить вигадливим, оскільки ви можете, наприклад, потрапляти в події в Інтернеті проти подій на робочому столі.
JB King

Відповіді:


15

На низькому рівні обробники подій часто працюють, опитуючи пристрій і чекаючи апаратного перерви. По суті, фонова нитка блокує, очікуючи на те, щоб апаратне переривання відбулося. Коли відбувається переривання, функція опитування перестає блокувати. Потім програма може з'ясувати, яка ручка пристрою спричинила перерву та який тип переривання, а потім діяти відповідно (наприклад, викликаючи функцію обробника подій). Зазвичай це робиться в окремому потоці, щоб це відбувалося асинхронно.

Звичайно, спосіб цього реально реалізується в значній мірі залежно від ОС та типу пристрою / вводу. У системах UNIX один із способів реалізації обробників подій для таких речей, як сокети, послідовний порт або USB - це через вибір або опитування системи. Один або кілька дескрипторів файлів / пристроїв (які пов'язані з таким пристроєм, як мережевий сокет, послідовний порт / порт USB тощо) передаються в pollсистемний виклик - який надається програмісту через API низького рівня. Коли подія відбувається на одному з цих пристроїв (наприклад, деякі дані надходять на послідовний порт), виклик опитувальної системи припиняє блокувати, і програма потім може визначити, який дескриптор пристрою спричинив подію та який тип події це був .

У Windows це обробляється по-різному, але поняття в основному однакові.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.