Третий режим - режим ввода, синхронизируемый событиями (или короче, режим обработки событий - event mode), позволяет реализовать обслуживание множества одновременно работающих устройств ввода. Описание этого режима я разбил на три стадии. Сначала я покажу, как режим обработки событий можно описать в терминах других режимов в пределах парадигмы "показания-синхронизация". Затем будут рассмотрены основные концепции архитектуры "клиент/сервер", в которой режим обработки событий играет главенствующую роль. Третья стадия - описание методики использования библиотеки GLUT при создании программ на OpenGL, активно взаимодействующих с пользователем. На этой стадии мы проанализируем демонстрационную программу, в которой применяется подобный интерфейс.

Предположим, что наше приложение работает в операционной среде, располагающей множеством устройств ввода, каждое из которых имеет свои средства формирования сигналов синхронизации и съема показаний. Каждый раз, когда устройство формирует сигнал синхронизации, возникает (иногда говорят возбуждается) событие (event). При этом показания устройства вместе с его идентификатором помещаются в очередь событий (event queue). Очередь событий заполняется операционной системой без всякого вмешательства со стороны прикладных программ и независимо от того, как прикладная программа собирается реагировать на возникшие события. Один из способов обработки событий в прикладной программе схематически показан на рис. 3.10. Прикладная программа может проанализировать информацию о событии, которое стоит в очереди первым на обработку, или, если очередь пуста,

3.2. Устройства ввода

перейти в состояние ожидания возникновения события. После извлечения из очереди информации о событии прикладная программа определяет его тип и решает, что делать дальше. Именно такой метод используется в АР1 графических систем вКБ и РНЮ5.

Режим ввода с обработкой событий

Рис. 3.10. Режим ввода с обработкой событий Другой подход- связать с каждым типом событий функцию с обратным вызовом (callback). Мы будем следовать именно такому подходу, поскольку он используется в подавляющем большинстве современных операционных систем и доказал свою эффективность в системах с архитектурой "клиент/сервер".


⇐ Предыдущая| |Следующая ⇒