Обмен данными между процессами и потоками
В Windows NT/2000/ХР применяются механизмы межпроцессного взаимодействия (InterProcess Communication - IPC), приведенные в таблице 1.
Таблица 1
Механизм IPC | Назначение |
Динамический обмен данными (Dynamic Data Exchange - DDE) | Устарел и труден в реализации. Рекомендуется использовать лишь в случаях крайней необходимости. |
Буфер обмена | Пересылка данных обычно выполняется с участием пользователя. |
OLE 2.0 | Имеются встроенные функции для пересылки данных через границы процессов. Излишне сложен для простого обмена данными. |
Сообщения WM_USER | Они работают - но чувствительны к ошибкам при передаче указателей. |
Сообщения WM_COPYDATA | Способ пересылки блока данных из одной программы в другую. Используется в тех случаях, когда скорость передачи данных не является критической и не требуется синхронизировать передачу данных. |
Анонимные каналы (Anonymous pipes) | Полезны для организации прямой связи между двумя процессами на одном ПК. |
Именованные каналы (Named pipes) | Полезны для организации прямой связи между двумя процессами на одном ПК или в сети. |
Почтовые ячейки (mailslots) | Полезны для организации связи одного процесса со многими на одном ПК или в сети. |
Гнезда (sockets) | Полезны для организации пересылки данных как в Windows-программы, так и в прочие программы, функционирующие на одном ПК, в сети или в интрасети. |
События, взаимные исключения (mutexes) и семафоры | Только для простого взаимодействия - пересылка данных невозможна. |
Файлы отображаемой памяти | Обеспечивают одновременный доступ к объектам файла отображения из нескольких процессов. |
В среде операционной системы Microsoft Windows NT/2000/ХР доступно такое удобное средство передачи данных между параллельно работающими процессами, как каналы типа Pipe. Это средство позволяет организовать передачу данных между локальными процессами, а также между процессами, запущенными на различных рабочих станциях в сети. Каналы типа Pipe больше всего похожи на файлы, поэтому они достаточно просты в использовании.
Через канал можно передавать данные только между двумя процессами. Один из процессов создает канал, другой открывает его. После этого оба процесса могут передавать данные через канал в одну или обе стороны, используя для этого хорошо знакомые вам функции, предназначенные для работы с файлами, такие как ReadFile и WriteFile. Заметим, что приложения могут выполнять над каналами Pipe синхронные или асинхронные операции, аналогично тому, как это можно делать с файлами. В случае использования асинхронных операций необходимо отдельно побеспокоиться об организации синхронизации.
Дата добавления: 2018-11-25; просмотров: 626;