Составители:
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
- …
- следующая ›
- последняя »