Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os6.doc
Скачиваний:
0
Добавлен:
20.06.2023
Размер:
199.68 Кб
Скачать

6.3.2. Обмен сообщениями

Очень популярный механизм, ориентированный на управляемые событиями операционные среды. Он может быть использован как между объектами одного приложения, так и между разными приложениями.

Архитектура объектно-ориентированных событийно управляемых приложений существенно отличается от традиционных «линейных» (ДОС) приложений.

Грубо архитектуру линейного приложения можно представить следующим образом:

Call Proc1;

Call Proc2;

Call ProcN;

Архитектуру объектно-ориентированного приложения можно представить следующим образом:

Это набор объектов – программных конструкций, отображающих объекты реального мира.

Объекты не могут существовать сами по себе. Им присуще стремление взаимодействовать друг с другом.

Можно выделить два способа взаимодействия объектов:

  1. В методе одного объекта выполняется прямой вызов метода (который объявлен как доступный) другого объекта.

  1. Обмен сообщениями между объектами.

Прямой вызов

Взаимодействие объектов через сообщения

В сообщении указывается адрес получателя (другой объект) и данные. Некоторое средство, называемое Диспетчер, получает сообщения и перераспределяет их получателям.

Объекты в обязательном порядке должны иметь в своем составе метод-обработчик сообщения, т.е. функцию, которая вызывается при получении сообщения.

В Windows-среде функции диспетчера выполняет ядро ОС, а в качестве объектов выступают экземпляры оконных классов. Метод-обработчик сообщений называют оконной функцией.

ОС собирает информацию о всех событиях, происходящих в системе, и рассылает эту информацию оконным функциям, для которых информация предназначена.

Сообщения могут создаваться как самой ОС в ответ на возникающие события, так и приложениями, точнее объектами приложения, в соответствии с характером прикладной задачи.

API Windows предлагает функции SendMessage() (синхронная) и PostMessage() (асинхронная) для обмена сообщениями между объектами.

Функция SendMessage() завершается, когда завершится выполнение обработчика сообщения в объекте-получателе и возвращает результат обработки, т.е. то значение, которое обработчик вернет оператором return.

Функция PostMessage() кладет сообщение в системную очередь и сразу же возвращает управление приложению. Тем самым исключаются задержки в выполнении приложения, но и отсутствует результат обработки сообщения.

Обе функции имеют одинаковый набор параметров:

BOOL PostMessage(

HWND hWnd, // получатель

UINT Msg, // сообщение

WPARAM wParam, // первый параметр

LPARAM lParam // второй параметр

);

Пример вызова функции:

PostMessage(HWND_BROADCAST, WM_SENDAPP, 1, 1));

Механизм обмена через сообщения поддерживается также и в Unix-подобных ОС. Знакомство с ним производится на лабораторных занятиях.

6.3.3. Обмен данными через Clipboard

Clipboard - это средство обмена данными, представляющее собой совокупность разделяемой области памяти и набора функций, обслуживающих эту область.

Традиционным способом использования Clipboard является обмен данными при участии пользователя.

Однако и другие, более развитые средства обмена данными, такие как DDE и OLE, используют концепции Clipboard в своей основе.

Важнейшей концепцией Clipboard является концепция формата данных.

Широкое распространение Clipboard и получила из-за фактической стандартизации ряда форматов данных, используемых при обмене между приложениями.

Эта стандартизация позволила снять с пользователя проблемы преобразования данных при передаче их из одного приложения в другое, что и способствовало широкому распространению Clipboard. Среда сама берет на себя проблемы преобразования данных на основе ряда стандартных форматов.

Стандартизация форматов, однако, не ограничивает возможности их расширения.

Приложение может создать новый формат, отличный от стандартного формата. Его только необходимо зарегистрировать в среде с помощью функции:

RegisterClipboardFormat(строка с именем нового формата),

передав этой функции имя формата.

Функция возвращает уникальный идентификатор формата. Если другие приложения вызовут эту функцию, передав ей это же имя формата, то функция возвратит им уже созданный идентификатор формата.

Таким образом, все приложения будут пользоваться одним и тем же идентификатором для обмена данными, представленными в этом формате.

Стандартные форматы данных обозначаются константами, имеющими символические имена. Приведем в качестве примера пару таких форматов:

  1. cf_Text - ASCIIZ строка;

  1. cf_BitMap - один из форматов графического изображения.

Существует еще несколько (~25) стандартных форматов данных, поддерживаемых Clipboard.

Ниже мы рассмотрим порядок обмена данными через Clipboard с точки зрения программиста, а не пользователя.

Передача данных в Clipboard

Передача данных в Clipboard включает в себя ряд этапов.

  1. Подготовка данных для передачи в Clipboard;

  1. Открытие Clipboard;

  1. Очистка Clipboard;

  1. Посылка данных в Clipboard;

  1. Закрытие Clipboard.

Соседние файлы в предмете Операционные системы