ЖУРНАЛ СТА 1/1996

107 1/96 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ событий. То есть поль- зователь может легко переносить окна с од- ного физического эк- ранана другой (рис. 4). Представим ситуа- цию из будущего отечественных пред- приятий (и настоя- щего западных). Предположим, опе- ратор на фабрике имеет переносной компьютер (HPC), снабженный беспроводным сетевым интерфейсом. Оператор может подо- йти к основному управляющему компьютеру, перенести окно с его эк- рана на HPC и продолжать следить за процессом, прогуливаясь по фабрике. Работа с удаленным дисплеем Предположим, вы хотите посмот- реть, что происходит на экране компь- ютера, расположенного в другом зда- нии (оператор столкнулся с неразре- шимой для себя задачей и просит по- мощи у системного программиста). Для этого необходимо только создать регион, чувствительный к графичес- ким событиям и прозрачный для них, и вставить его в пространство собы- тий нужного вам узла. Так как этот ре- гион прозрачен для графических со- бытий, то он не оказывает влияния на события, происходящие на удаленном узле. Он перехватывает события и пе- ренаправляет их по сети в ваше про- странство событий. Такая реализация перехвата событий практически не оказывает влияния на производитель- ность системы в целом. Администратор оконного интерфейса Возможность региона фильтровать и воспроизводить события упрощает реализацию администратора оконно- го интерфейса. По внешнему виду и функциональ- ным возможностям оконный интер- фейс выполнен в стиле известного стандарта OSF Motif [1]. В Photon, как и в любой другой оболочке, пользова- тель получает возможность управле- ния графическими окнами: переме- щения, изменения размера, сворачи- вания в пиктограмму и так далее. Когда администратор окон начинает работу, он вставляет свой регион в про- странство событий непосредственно перед корневым регионом. Этот новый регион представляет собой рабочее пространство или фон, который поль- зователь видит на экране. Когда запус- кается очередная при- кладная программа, администратор окон выделяет в ее распо- ряжение два региона: регион программы, предназначенный для ее использования и принадлежащий толь- ко ей, и немного боль- ший по размеру реги- он окна, о котором программа пользова- теля может даже не подозревать. В регионе окна менед- жер размещает различные атрибуты управления, которые позволяют поль- зователю перемещать окно, изменять его размер и тому подобное. Фокусировка Когда вы работаете с клавиатурой, отображение вводимой информации, как правило, происходит в одном (ак- тивном) окне. Вопрос заключается в том, по какому признаку определять активность, или, другими словами, фо- кусировку. Существуют два способафо- кусировки, которые пользователь мо- жет выби- рать по сво- ему усмот- рению: ак- т и в н ы м считается окно, в пре- делах кото- рого распо- ложен ука- затель мы- ши либо в пределах которого пользова- тель нажал к н о п к у мыши. Для Photon фо- кусировка выражается в том, что регион актив- ного окна становится чувствитель- ным и непрозрачным для событий, исходящих от региона клавиатуры. Обработка событий Как и X Window System, Photon ис- пользует архитектуру клиент/сервер. Сервером выступает ядро — Photon, обеспечивающее поддержку про- странства событий. Любой другой процесс, будь то драйвер или про- грамма пользователя, представляет собой клиентскую часть. Интерфейс между клиентом и сервером базирует- ся на механизме передачи сообще- ний, используемом в QNX. Программа, которой принадлежит тот или иной регион, может получать информацию о произошедшем собы- тии одним из трех способов: ● запрос, ● синхронное оповещение, ● асинхронное оповещение. Используя метод запросов (пример 1), программа производит циклический опрос ядра Photon на предмет прихода того или иного события в удобное для нее время. Для большинства программ этот метод является достаточно неэф- фективным, но может быть полезным для реализации высокоскоростной ани- мации, когда программа выполняет оп- рос в промежутках между выполнением графических или других функций. Большинство программ использует метод синхронного оповещения (при- мер 2). Программа посылает запрос ядру Photon, который отвечает только тогда, когда произошло событие, в ко- тором программа заинтересована. Все время с момента посылки запроса до получения ответа на него Photon бло- кирует программу, то есть она нахо- дится в состоянии ожидания и не про- изводит никаких действий. Если вам нужно больше гибкости, на- пример, когда вы пишете программу- сервер, которая должна принимать и обрабатывать сообщения, приходя- щие от других задач, вы должны ис- пользовать метод асинхронного опо- вещения (пример 3). В этом случае программа вызывает функцию, уста- навливающую заместитель (proxy) [3], [8], которую Photon будет «включать» после прихода события. Программа, выполняющая свои основные функ- ции как сервер, будет получать среди Рис. 4. Перенос окна с одного экрана на другой

RkJQdWJsaXNoZXIy MTQ4NjUy