Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 11
- 12
- 13
- 14
- 15
- …
- следующая ›
- последняя »
