Это общая тема, как работают обработчики событий?
Это означает, что за кулисами - что происходит, когда они создаются.
У меня есть грубая идея, но я хотел бы, чтобы она была подтверждена.
Это общая тема, как работают обработчики событий?
Это означает, что за кулисами - что происходит, когда они создаются.
У меня есть грубая идея, но я хотел бы, чтобы она была подтверждена.
Ответы:
На низком уровне обработчики событий часто работают, опрашивая устройство и ожидая аппаратного прерывания. По сути, фоновый поток блокируется во время ожидания аппаратного прерывания. Когда происходит прерывание, функция опроса прекращает блокировку. Затем приложение может выяснить, какой дескриптор устройства вызвал прерывание и каким типом прерывания оно было, и затем действовать соответствующим образом (например, вызывая функцию обработчика события). Обычно это делается в отдельном потоке, так что это происходит асинхронно.
Конечно, способ, которым это на самом деле реализовано, значительно варьируется в зависимости от ОС и типа устройства / ввода. В системах UNIX одним из способов реализации обработчиков событий для таких вещей, как сокеты, последовательные порты или порты USB, является использование системных вызовов select или poll . Один или несколько дескрипторов файлов / устройств (которые связаны с устройством, таким как сетевой сокет, последовательный порт / USB-порт и т. Д.) Передаются poll
системному вызову, который доступен программисту через низкоуровневый C-API. Когда событие происходит на одном из этих устройств (например, некоторые данные поступают на последовательный порт), системный вызов poll прекращает блокировку, и приложение затем может определить, какой дескриптор устройства вызвал событие, и какой тип события это было ,
В Windows это обрабатывается по-разному, но концепции в основном одинаковы.