Составители:
флаг ожидания. Флаги режима чтения и режима ввода тесно связаны друг с другом - бо-
лее удобно было бы назвать их соответственно флагом чтения и флагом записи. Они со-
вместно определяют принципы организации и интерпретации данных, передаваемых по 
каналу. Оба флага допускают выбор между байтовым режимом и режимом сообщений. 
К  флагам  ввода (режим  записи)  относятся PIPE_TYPE_BYTE  и 
PIPE_TYPE_MESSAGE,  а  к  флагам  режима  чтения - PIPE_READMODE_BYTE  и 
PIPE_READMODE_MESSAGE. 
В каналах, работающих в байтовом режиме, информация записывается и читается в 
обычном двоичном виде и воспринимается просто как последовательность байтов. 
Однако иногда бывает удобным разбить передаваемую по каналу информацию на 
дискретные сообщения, в которых результат каждой операции записи соответствует от-
дельному  сообщению.  Каналы, работающие в  режиме  сообщений, автоматически и  не-
заметно для пользователя предваряют каждое новое сообщение невидимым заголовком, 
задающим длину сообщения. Заголовок обеспечивает автоматическую остановку опера-
ции  чтения  при  достижении  конца  сообщения.  Получатель  читает  сообщения  одно  за 
другим точно в том виде, в котором они записывались в канал. 
Так,  если  одна  программа  посылает  другой  длинную  последовательность  целых 
чисел, ей целесообразно выбрать байтовый режим канала, поскольку для получателя не 
имеет значения, сколько целых чисел будет передано в канал в течение одной операции 
записи.  Он  просто  поочередно  читает  целые  числа  из  канала.  Однако  если  Программа 
посылает  команды,  написанные  на  языке  сценариев,  адресат  должен  получать  эти  ко-
манды целиком, в том виде, в котором они были записаны, чтобы правильно произвести 
их Синтаксический  анализ. Поскольку разные  команды могут  иметь различную  длину, 
обе программы должны использовать канал, работающий в режиме сообщений. 
Режимы  записи  и  чтения  назначаются  независимо  друг  от  друга,  однако  не  все 
комбинации  являются  допустимыми.  В  частности,  нельзя  одновременно  использовать 
флаги PIPE_TYPE_BYTE  и PIPE_READMODE_MESSAGE.  Канал  байтового  типа  осу-
ществляет запись информации, не разделяя сообщения заголовками, поэтому на прием-
ном  конце  канала  эта  информация  не  может  быть  разбита  на  отдельные  сообщения.  С 
другой  стороны,  комбинация  флагов PIPE_TYPE_MESSAGE  и 
PIPE_READMODE_BYTE  является  вполне  допустимой.  В  этом  случае  программа-
отправитель записывает в канал сообщения, сопровождая их заголовками, однако полу-
чатель игнорирует эти заголовки, принимая данные в виде последовательности неразде-
ленных байтов (иными словами, получатель не воспринимает невидимые заголовки со-
общений). 
Наряду  с флагами режимов  записи  и чтения  параметр fdwPipeMode может содер-
жать  еще  один  флаг,  устанавливающий  для  канала  режим  ожидания.  Режим  ожидания 
определяет, что произойдет с каналом, если какие-то условия временно воспрепятству-
ют  завершению  команды.  Например,  при  попытке  прочитать  информацию  из  пустого 
канала некоторые команды должны забыть о незавершенной операции чтения и перейти 
к  выполнению  следующих  операторов,  в  то  время  как  другие  программы,  прежде  чем 
продолжить работу, должны дождаться поступления считываемого сообщения. 
По умолчанию каналы заставляют читающие потоки блокироваться и ожидать по-
ступления сообщения, однако вы можете предотвратить их блокировку, добавив в пара-
метр fdwPipeMode флаг PIPE_NOWAIT.  По  умолчанию  указанный  параметр  содержит 
флаг PIPE_WAIT.  Режим  ожидания  влияет  как  на  команды  записи,  так  и  на  команды 
чтения. Программа, пытающаяся записать информацию при заполненном буфере канала, 
обычно  блокируется  до  тех  пор,  пока  другая  программа  не  освободит  место  в  буфере, 
прочитав сообщение на другом конце канала. Режим ожидания также влияет и на работу 
сервера, который пытается соединиться с клиентом. Если функция ConnectNamedPipe() 
не обнаруживает клиента, готового к соединению, режим ожидания канала определяет, 
179
флаг ожидания. Флаги режима чтения и режима ввода тесно связаны друг с другом - бо-
лее удобно было бы назвать их соответственно флагом чтения и флагом записи. Они со-
вместно определяют принципы организации и интерпретации данных, передаваемых по
каналу. Оба флага допускают выбор между байтовым режимом и режимом сообщений.
     К    флагам    ввода     (режим    записи)   относятся   PIPE_TYPE_BYTE и
PIPE_TYPE_MESSAGE, а к флагам режима чтения - PIPE_READMODE_BYTE и
PIPE_READMODE_MESSAGE.
     В каналах, работающих в байтовом режиме, информация записывается и читается в
обычном двоичном виде и воспринимается просто как последовательность байтов.
     Однако иногда бывает удобным разбить передаваемую по каналу информацию на
дискретные сообщения, в которых результат каждой операции записи соответствует от-
дельному сообщению. Каналы, работающие в режиме сообщений, автоматически и не-
заметно для пользователя предваряют каждое новое сообщение невидимым заголовком,
задающим длину сообщения. Заголовок обеспечивает автоматическую остановку опера-
ции чтения при достижении конца сообщения. Получатель читает сообщения одно за
другим точно в том виде, в котором они записывались в канал.
     Так, если одна программа посылает другой длинную последовательность целых
чисел, ей целесообразно выбрать байтовый режим канала, поскольку для получателя не
имеет значения, сколько целых чисел будет передано в канал в течение одной операции
записи. Он просто поочередно читает целые числа из канала. Однако если Программа
посылает команды, написанные на языке сценариев, адресат должен получать эти ко-
манды целиком, в том виде, в котором они были записаны, чтобы правильно произвести
их Синтаксический анализ. Поскольку разные команды могут иметь различную длину,
обе программы должны использовать канал, работающий в режиме сообщений.
     Режимы записи и чтения назначаются независимо друг от друга, однако не все
комбинации являются допустимыми. В частности, нельзя одновременно использовать
флаги PIPE_TYPE_BYTE и PIPE_READMODE_MESSAGE. Канал байтового типа осу-
ществляет запись информации, не разделяя сообщения заголовками, поэтому на прием-
ном конце канала эта информация не может быть разбита на отдельные сообщения. С
другой      стороны,       комбинация       флагов      PIPE_TYPE_MESSAGE         и
PIPE_READMODE_BYTE является вполне допустимой. В этом случае программа-
отправитель записывает в канал сообщения, сопровождая их заголовками, однако полу-
чатель игнорирует эти заголовки, принимая данные в виде последовательности неразде-
ленных байтов (иными словами, получатель не воспринимает невидимые заголовки со-
общений).
     Наряду с флагами режимов записи и чтения параметр fdwPipeMode может содер-
жать еще один флаг, устанавливающий для канала режим ожидания. Режим ожидания
определяет, что произойдет с каналом, если какие-то условия временно воспрепятству-
ют завершению команды. Например, при попытке прочитать информацию из пустого
канала некоторые команды должны забыть о незавершенной операции чтения и перейти
к выполнению следующих операторов, в то время как другие программы, прежде чем
продолжить работу, должны дождаться поступления считываемого сообщения.
     По умолчанию каналы заставляют читающие потоки блокироваться и ожидать по-
ступления сообщения, однако вы можете предотвратить их блокировку, добавив в пара-
метр fdwPipeMode флаг PIPE_NOWAIT. По умолчанию указанный параметр содержит
флаг PIPE_WAIT. Режим ожидания влияет как на команды записи, так и на команды
чтения. Программа, пытающаяся записать информацию при заполненном буфере канала,
обычно блокируется до тех пор, пока другая программа не освободит место в буфере,
прочитав сообщение на другом конце канала. Режим ожидания также влияет и на работу
сервера, который пытается соединиться с клиентом. Если функция ConnectNamedPipe()
не обнаруживает клиента, готового к соединению, режим ожидания канала определяет,
                                       179
Страницы
- « первая
- ‹ предыдущая
- …
- 175
- 176
- 177
- 178
- 179
- …
- следующая ›
- последняя »
