Re: Взаимодействие процессов -- как сделать?
От: TSS Россия http://www.sdl.ru
Дата: 30.08.01 07:33
Оценка:
Здравствуйте volk, вы писали:

V> Имеется следующая задачка. Запускается до дюжины консольных приложений. Они должны обмениваться между собой данными, но не абы как, а по следующим правилам:

V> отправляющий процесс вызывает некую процедуру Send, передает ей указатель на массив данных, размер массива и ID процесса-получателя;
V> принимающий процесс вызывает процедуру Recv, передает ей указатель на буфер, в котором будут сохраняться данные, их размер и ID процесса-отправителя
V> Сложность состоит в том, что процедура Send не должна дожидаться, пока данные отправятся и будут приняты, а возвращать управление сразу. Так же и Recv только добавляет запрос на получение данных, но не дожидается, пока буфер приема будет заполнен. Кроме того, вовсе не обязательно, что сначала будет вызван Send, а потом Recv. Порядок вызова этих процедур может быть совершенно произвольным.

V> Буду очень благодарен, если кто-нибудь подскажет, при помощи каких механизмов Windows 95/98 можно организовать такое взаимодействие.


Я так понимаю, сам механизм обмена данными основан на принципе "поточноти" (streaming).

Самый простой на мой взгляд способ -- это механизм сокетов. Работает просто и со вкусом, а если пользовать Windows Sockets 2, то ещё и асинхронно.
Т.е. идея состоит в том, чтобы написать ма-а-асенький сервак (a-la echo service). Send & Recv уже есть...

Можно спокойно использовать WM_COPYDATA вкупе с DDE, только юзать не SendMessage, а PostMessage
А вот при использоваении shared-memory или FileMapping, можно поиметь кучу геморроя...

Да, кстати, всегда остается возможность попользовать ReadProcessMemory() && WriteProcessMemory(), но у меня складывается впечатление, то применение данных фишек будет просто нерименимо.

Signed, [TSS] /SLC/
Signed, [TSS] /SDL/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.