Операционные системы. Учебное пособие. Марапулец Ю.В. - 205 стр.

UptoLike

Составители: 

Сервер, который не поддерживает транзакций с обязательным и полуобязательным
ответом, должен установить флаг CBF_FAIL_ADVISES в функции DdeInitialize. Таким
образом он предотвратит получение нежелательных сообщений XTYP_ADVSTART и
XTYP_ADVSTOP.
Для получения нового значения элемента данных клиент должен выполнить тран-
закцию с необязательным ответом. На рис. 8.3 изображены этапы этого процесса.
1. Сервер объявляет о поступлении новых данных.
2. DDEML информирует клиента, но клиент игнорирует это уведомление. Уведомле-
ния будут посылаться клиенту всякий раз при изменении данных на сервере, однако
клиент может проигнорировать их всех.
3. Сервер вновь объявляет об изменениях в запрашиваемом элементе данных.
4. Клиент откликается, запрашивая данные (сообщение XTYP_REQUEST).
5. DDEML передает запрос серверу.
6. Сервер посылает запрашиваемые данные клиенту.
Рис.8.3. Цикл транзакции с полуобязательным ответом
Обработка принудительных и командных транзакций. Некоторые серверы
предпочитают получать данные от клиента иным способом [12]. Клиент, который хочет
передать данные серверу, должен выполнить принудительную транзакцию - послать со-
общение XTYP_POKE. В ответ на это сообщение сервер проверяет тему и элемент дан-
ных и, при желании, читает объект данных.
Некоторые серверы также получают команды от своих клиентов, принимая их в
виде дескрипторов данных. Сервер блокирует объект, анализирует содержащуюся в нем
командную строку, а затем выполняет определенные действия. После анализа команд-
ной строки сервер должен освободить дескриптор данных, но при необходимости он
может скопировать эту строку для дальнейшего использования. Поскольку клиенты
обычно ожидают немедленного выполнения команд и требуют подтверждения, сервер,
207
     Сервер, который не поддерживает транзакций с обязательным и полуобязательным
ответом, должен установить флаг CBF_FAIL_ADVISES в функции DdeInitialize. Таким
образом он предотвратит получение нежелательных сообщений XTYP_ADVSTART и
XTYP_ADVSTOP.
     Для получения нового значения элемента данных клиент должен выполнить тран-
закцию с необязательным ответом. На рис. 8.3 изображены этапы этого процесса.
1. Сервер объявляет о поступлении новых данных.
2. DDEML информирует клиента, но клиент игнорирует это уведомление. Уведомле-
    ния будут посылаться клиенту всякий раз при изменении данных на сервере, однако
    клиент может проигнорировать их всех.
3. Сервер вновь объявляет об изменениях в запрашиваемом элементе данных.
4. Клиент откликается, запрашивая данные (сообщение XTYP_REQUEST).
5. DDEML передает запрос серверу.
6. Сервер посылает запрашиваемые данные клиенту.




                   Рис.8.3. Цикл транзакции с полуобязательным ответом

     Обработка принудительных и командных транзакций. Некоторые серверы
предпочитают получать данные от клиента иным способом [12]. Клиент, который хочет
передать данные серверу, должен выполнить принудительную транзакцию - послать со-
общение XTYP_POKE. В ответ на это сообщение сервер проверяет тему и элемент дан-
ных и, при желании, читает объект данных.
     Некоторые серверы также получают команды от своих клиентов, принимая их в
виде дескрипторов данных. Сервер блокирует объект, анализирует содержащуюся в нем
командную строку, а затем выполняет определенные действия. После анализа команд-
ной строки сервер должен освободить дескриптор данных, но при необходимости он
может скопировать эту строку для дальнейшего использования. Поскольку клиенты
обычно ожидают немедленного выполнения команд и требуют подтверждения, сервер,

                                          207