Межпроцессное взаимодействие на C++

Помогите, пожалуйста, как организовать обмен данными процесс-процесс (в винде, если это имеет значение)?

У меня есть process1.exe, который вызывает process2.exe с несколькими аргументами командной строки. Я хочу отслеживать «прогресс» process2 от process1 (скажем, какое-то значение int). Доступ к нему (этому int значению) можно получить из process1 постоянно или каждые X мс - не имеет значения.

Будет полезно любое решение: WinApi или Qt.

Спасибо всем! Все ответы очень полезны! :) Большое спасибо!!


person artyom.stv    schedule 08.03.2011    source источник


Ответы (5)


ДРУГОЕ:

  • перенаправление stdin/stdout
  • Именованный канал (CreateNamedPipe)
  • Анонимный канал (CreatePipe)
  • Сокеты (сокет, подключение, привязка)
  • Общая память (CreateFileMapping, MapViewOfFile)
  • Сообщения Windows (например, WM_APP)

Выберите один из них. Сообщения Windows или общая память могут быть проще.

person Erik    schedule 08.03.2011

Здесь есть много вариантов:

  1. Вы можете перенаправить стандартный вывод process2 и выводить обновления так часто, как вам нравится.
  2. Если стандартный вывод используется для чего-то другого, вы можете использовать именованный канал между процессами
  3. Вы также можете использовать именованную общую память. , что потребует меньше накладных расходов и, вероятно, будет проще в реализации (недостаток в том, что вам может потребоваться также выполнять синхронизацию между процессами)
  4. Если процесс 1 запускает насос сообщений, вы также можете использовать обычные сообщения Windows (посмотрите на WM_COPYDATA)
person Jon    schedule 08.03.2011

Существует несколько методов:

  • Розетки
  • Сообщения
  • Общая память (файлы)

Проблема в том, что Process2 будет транслировать, а Process1 будет слушать. Процессу 1 нужно будет знать, когда процесс 2 завершится и, возможно, процент выполнения.

Я считаю, что сокеты были бы лучшим путем, но это зависит от приложения, графика разработки и знакомства с концепциями.

person Thomas Matthews    schedule 08.03.2011

Вы можете просто отправлять сообщения с помощью Windows API (SendMessage).

person stefan    schedule 08.03.2011

Очевидным упущением в представленных до сих пор опциях является COM. Я ожидаю обычного шквала ответов «COM — это дерьмо», но, по моему опыту, это не так.

person Steve    schedule 08.03.2011
comment
+1. И в дополнение к COM также DCOM между компьютерами (что также является формой IPC). - person 0xC0000022L; 08.03.2011