Межпроцессное взаимодействие под C ++ - PullRequest
3 голосов
/ 08 марта 2011

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 08 марта 2011

Ото:

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

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

4 голосов
/ 08 марта 2011

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

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

Есть несколько методов:

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

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

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

1 голос
/ 08 марта 2011

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

1 голос
/ 08 марта 2011

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

...