Теория и практика программирования на Си в Unix

       

Запросы и события


Механизмы реализации являются существенно асинхронными: клиент посылает запросы, которые помещаются в очередь на ожидание обработки сервера. Клиент ожидает событий от сервера ; события тоже помещаются в очередь (рисунок 8.1.). Кроме того, сервер может переслать сообщение об ошибке - в случае, если запрос невозможно выполнить. Запросы, получаемые сервером, сохраняются в буферах. Содер- жимое буфера передается серверу, если буфер полон, или если клиент ожидает событий. Клиент ожидает событий во всех окнах, в которых он явно запросил получение специфицированных им типов событий.

Если сервер заметил, что в некотором окне произошло определенное событие, он посылает об этом сообщение всем клиентам, которые ждут данного сообщения в данном окне. Если таких клиентов нет, сервер поднимается по иерархии окон и выполняет ту же процедуру.

Рис. 8.1. - Принципиальная схема механизмов X Window.
1 - Сервер Х
- Управление ресурсами
- Обработка запросов
- Отправлений собщений о событиях
2 - Прикладная программа Клиент Х
- Посылка запросов
- Обработка сообщений
3 - Очередь ожидания запросов
4 - События
5 - Очередь ожидания сообщений
6 - Запросы
7 - Сокет
-Интерфейс
8 - Сетевой или локальный обмен данными

Существуют следующие возможности синхронизации между клиентом и сервером :
- некоторые запросы требуют ответа сервера : например, запрос о состоянии окна
- клиент может запросить, чтобы текущий буфер был передан серверу, с помощью функции XFlush(). Эта операция выполняется автоматически каждый раз, когда клиент переходит в состояние ожидания события - клиент может потребовать, чтобы запрос был передан серверу и выполнен им с помощью функции XSync().



Содержание раздела