Обмен данными между программами

S70
Дата: 15.11.2014 17:52:29
Коллеги,

день добрый. Подскажите, плиз, как решать такую задачу. Есть две программы на С++. Работают одновременно. Каждая из них что-то делает с данными. Как реализовать функционал по прямому обмену данными между ними (т.е. без промежуточных файлов и т.п.)? Вопрос синхронизации – не стоит. Просто обмен данными.

Спасибо
Dimitry Sibiryakov
Дата: 15.11.2014 18:10:37

InterProcess Communication это называется и может осуществляться кучей различных способов
от посылки Windows Messages до использования TCP/IP (UDP).

Posted via ActualForum NNTP Server 1.5

S70
Дата: 17.11.2014 03:06:01
Dimitry Sibiryakov,

спасибо, посмотрел. А когда какая-то программа предоставляет API, это делается через InterProcess Communication?
Basil A. Sidorov
Дата: 17.11.2014 05:05:58
Есть разные способы "предоставить API".
Можно экспортировать нужные функции, можно реализовать сервис для общения через IPC.
Leonid Kudryavtsev
Дата: 17.11.2014 14:18:39
Если Windows, можно попытаться на COM Automation посмотреть.

вообще, тема не очень раскрыта. Если Вы их сами пишете, то зачем две программы? почему просто не DLL?

Когда мне нужно было отдельным процессом кусок кода запустить, то я банально через стандартный ввод-вывод обменивался. Главный процесс писал в стандартный ввод порожденного процесса, соответственно порожденный писал в стандартный вывод, а главный оттуда читал. Пара десятков строк кода стыренных из MSDN, просто, дешево и отлаживать легко.
mayton
Дата: 17.11.2014 15:06:15
S70, эту задачу можно решать десятком способов. Сокеты, файлы, маилслоты, pipes, разделяемая память, и даже клипборд
и реестры. Вся разница в 1) скорости как это закодить 2) в сложности 3) в пропускной способности канала
который получится по факту.

Вобщем дальше без ТЗ говорить безсмысленно. Философия пойдет.
NekZ
Дата: 17.11.2014 15:17:34
S70,

В Qt для этого есть подходящий класс QSharedMemory
Изопропил
Дата: 17.11.2014 16:13:02
всё бы ничего, то топикстартеру нужно решить ту же задачу и для c#

голосую за shared memory
чччД
Дата: 17.11.2014 16:47:30
Изопропил
всё бы ничего, то топикстартеру нужно решить ту же задачу и для c#
...


ZeroMQ

Пример сервера на C: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive

Пример клиента на С++, http://zguide.zeromq.org/cpp:hwclient
Пример клиента на C#: http://zguide.zeromq.org/cs:hwclient
...

C++: http://zeromq.org/bindings:cpp (ну или просто C, используя CZMQ: http://czmq.zeromq.org/)
C#: http://zeromq.org/bindings:clr

Обмен данными единым образом внутри процесса, между потоками, между процессами, между разными компьютерами сети.
Протоколы: tcp, iproc, ipc, multicast, ...
OS'es: Windows, Linux, Android, ...

Биндинг: питон, ява, сишарп, пхп, дельфи, и еще куча языков
Масса режимов: запрос/ответ, издатель/подписчик, запрос/маршрутизатор, эксклюзивная пара... ... ...

Не требует выделенного процесса. Быстрая. Компактная. Бесплатная. Развивается.