Какой самый простой способ асинхронной связи между приложениями C ++ и C # - PullRequest
1 голос
/ 08 октября 2010

У меня есть приложение C ++, которое должно взаимодействовать с приложением C # (службой Windows), работающим на той же машине. Я хочу, чтобы приложение C ++ могло писать столько сообщений, сколько оно хочет, не зная и не заботясь о том, когда / если приложение C # читает их или даже если оно работает. Приложение C # должно просто время от времени просыпаться и запрашивать последние сообщения, даже если приложение C ++ было закрыто.

Какой самый простой способ добиться этого? Я думаю, что именно для этого и нужен MSMQ, но я не нашел хорошего способа сделать это в C ++. Я сейчас использую Named Pipes, но на самом деле это не сработает, так как для этого требуется соединение между двумя приложениями и вызов C ++ для блоков WriteLine до тех пор, пока не произойдет чтение.

В настоящее время лучшее решение, которое я могу придумать, - это просто записывать сообщения в файл с отметкой времени для каждого сообщения, которое приложение C # периодически проверяет по отметке времени последнего обновления. Хотя это кажется немного грубым.

Какой самый простой способ добиться такого рода сообщений?

Ответы [ 4 ]

2 голосов
/ 08 октября 2010

Я бы использовал именованную трубу.

1 голос
/ 08 октября 2010

Ну, самый простой способ на самом деле - это использовать файл для хранения сообщений.Я бы предложил использовать встроенную базу данных, такую ​​как SQLite, однако: преимуществом будет лучшая производительность и хороший способ запрашивать изменения (например, SELECT * FROM сообщений WHERE timestamp> last_app_start).

0 голосов
/ 08 октября 2010

Требование к обоим приложениям, не всегда работающим в одно и то же время, но все же способным отправлять сообщения друг другу, определенно означает, что вам нужен третий компонент для хранения / очереди сообщений. Используете ли вы общую базу данных / файл или пишете третье приложение, которое действует как хранилище сообщений, зависит только от вас. В любом случае, вы найдете, что обмен всегда вызывает конфликт.

Лично я бы посмотрел на 0MQ до MSMQ, но ни одна из них не решит вашу проблему как есть. База данных sqlite будет моим первым выбором.

0 голосов
/ 08 октября 2010

MSMQ определенно звучит как то, что вы хотите, или более простое чтение и запись файлов, записанных в общую область, но тогда вам нужно следить за конфликтами в файлах.

Помощь по VC ++ для MSMQ .

...