Организация вычислительных процессов в ЭВМ. Лясин Д.Н - 13 стр.

UptoLike

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

13
MessageBox(hWnd, “Невозможно считать данные”,”Ошибка чтения”,
MB_OK); // выводим окно с сообщением об ошибке. Код ошибки можно
// проанализировать функцией GetLastError()
В приведенном выше примере процессы обмениваются информацией
через экземпляры структуры типа MSG. Необходимо отметить несколько
особенностей использования анонимных каналов. Во-первых, анонимные ка-
налы всегда функционируют в режиме ожидания, то есть
функция ReadFile
блокирует поток до тех пор, пока в канал не поступят данные. Во-вторых,
анонимный канал передает данные в байтовом режиме, то есть информация
считывается не порциями-сообщениями, а по байтам, и данные, помещенные
в канал несколькими вызовами функции WriteFile, можно считать одним вы-
зовом функции ReadFile.
Для создания именованного канала необходимо
использовать функцию
CreateNamedPipe:
HANDLE CreateNamedPipe(
LPCTSTR lpName, // имя канала
DWORD dwOpenMode, // атрибуты канала: доступ, перекрытие
DWORD dwPipeMode, // тип канала, режимы чтения и ожидания
DWORD nMaxInstances, // максимальное количество клиентов канала
DWORD nOutBufferSize, // размер выходного буфера в байтах
DWORD nInBufferSize, // размер входного буфера в байтах
DWORD nDefaultTimeOut, // время ожидания выполнения транзакции в
// мсек по умолчанию
LPSECURITY_ATTRIBUTES lpSecurityAttributes // атрибуты безопасности
);
Первый параметр функции указывает на строку
с именем канала. Имя
канала должно иметь следующий синтаксис:
  MessageBox(hWnd, “Невозможно считать данные”,”Ошибка чтения”,
  MB_OK); // выводим окно с сообщением об ошибке. Код ошибки можно
           // проанализировать функцией GetLastError()


      В приведенном выше примере процессы обмениваются информацией
через экземпляры структуры типа MSG. Необходимо отметить несколько
особенностей использования анонимных каналов. Во-первых, анонимные ка-
налы всегда функционируют в режиме ожидания, то есть функция ReadFile
блокирует поток до тех пор, пока в канал не поступят данные. Во-вторых,
анонимный канал передает данные в байтовом режиме, то есть информация
считывается не порциями-сообщениями, а по байтам, и данные, помещенные
в канал несколькими вызовами функции WriteFile, можно считать одним вы-
зовом функции ReadFile.
      Для создания именованного канала необходимо использовать функцию
CreateNamedPipe:
HANDLE CreateNamedPipe(
  LPCTSTR lpName,          // имя канала
  DWORD dwOpenMode,        // атрибуты канала: доступ, перекрытие
  DWORD dwPipeMode,        // тип канала, режимы чтения и ожидания
  DWORD nMaxInstances,     // максимальное количество клиентов канала
  DWORD nOutBufferSize,    // размер выходного буфера в байтах
  DWORD nInBufferSize,     // размер входного буфера в байтах
  DWORD nDefaultTimeOut, // время ожидания выполнения транзакции в
                           // мсек по умолчанию
  LPSECURITY_ATTRIBUTES lpSecurityAttributes // атрибуты безопасности
 );
      Первый параметр функции указывает на строку с именем канала. Имя
канала должно иметь следующий синтаксис:




                                   13