@nano_e_t_4

Как работает обработка события операционной системой?

Всем привет
Вопрос вот какой (на примере браузера chromium):
есть событие, например клик мыши на кнопке во вкладке браузера (вкладок открыто несколько). Каким образом в итоге этот ивент долетает непосредственно до движка рендера, который уже отрисовывет событие, спрятанное за кнопкой?

читаю доки хромиума для девелоперов, понимание появляется, но весьма пока что смутные. если кто то знает или раскуривал эту историю, расскажите плиз
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
@Karpion
Клик мыши проходит через множество обработчиков, начиная с обработчика аппаратного прерывания. Т.е. сначала это обрабатывается в ядре, потом передаётся в X-сервер, где соотносится с определённым окном, а окно соотносится с его владельцем-приложением. Далее X-сервер через ядро связывается с владельцем окна (в данном случае - браузером) и передаёт обработчик ему. В браузере обработка клика тоже делается в много стадий в разных программных компонентах, включая JS-интерпретатор; а тот уже передаёт команды рендеру. Причём рендер - это сначала браузер, потом (опять через ядро) передаётся в X-сервер.

А некоторые клики (по объектам, которым не назначен JS-обработчик - естественно, обрабатываются без JS-интерпретатора, встроенными обработчиками.

Судя по последней фразе - Вас интересует только то, что происходит в браузере. Это я не копал, не знаю.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
alfss
@alfss
https://career.habr.com/alfss
События в рамках Linux реализует X сервер. В браузере используется библиотека UI которая оборачивает сигналы от X сервера и позволяет их обрабатывать в рамках своих абстракций.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Расскажу только про windows

Внутри windows есть куча примитивов основной примитив это сообщения с символьным именем WM_*

Все другие системы оперируют ими, на уровне фреймворков и разных языков есть свои абстракции, но в ядро транслируются именно она.

https://docs.microsoft.com/ru-ru/windows/win32/api...

За счет этого Windows довольно шустро отрисовует графику и откликается на пользовательский ввод. В этом есть и свои минусы. Но по большей части сейчас все закрыли.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
В GUI приложении есть event loop, который получает у ОС очередное событие и обрабатывает его.
Обычно event loop спрятан глубоко в дебрях используемой в приложении GUI библиотеки (например Qt).
Чтоб разобраться нужно посмотреть как это пишут на низком уровне. Гуглите о написании "оконной процедуры" - это для винды. В никсах все примерно так же.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы