在C ++和C#应用程序之间进行异步通信的最简单方法是什么?

时间:2010-10-07 22:41:35

标签: c# c++ messaging

我有一个C ++应用程序需要与在同一台机器上运行的C#应用​​程序(Windows服务)进行通信。我希望C ++应用程序能够根据需要编写尽可能多的消息,而无需知道或关心C#应用程序何时/是否正在读取它们,或者即使它正在运行。即使C ++应用程序已经关闭,C#应用程序也应该偶尔醒来并请求最新的消息。

实现这一目标的最简单方法是什么?我认为这是MSMQ的用途,但我还没有找到一种在C ++中实现它的好方法。我现在正在使用命名管道,但这并不是真的有效,因为我正在做的事情需要两个应用程序之间的连接,并且C ++调用WriteLine块直到读取发生。

目前我能想到的最好的解决方案就是将消息写入一个文件,每个消息上都有一个时间戳,C#应用程序会定期检查其上一次更新时间戳。但这似乎有点粗糙。

实现此类消息传递的最简单方法是什么?

4 个答案:

答案 0 :(得分:2)

我会使用命名管道。

答案 1 :(得分:1)

嗯,实际的最简单方法是使用文件来存储消息。我建议使用像SQLite这样的嵌入式数据库:优点是更好的性能和查询更改的好方法(即SELECT * FROM messages WHERE timestamp> last_app_start)。

答案 2 :(得分:0)

MSMQ绝对听起来像你想要的,或者更基本的读写文件写入公共区域但是你需要观察文件的争用。

VC++ help on MSMQ

答案 3 :(得分:0)

两个应用程序的要求并不总是同时运行但仍然能够相互通信,这意味着您需要第三个组件来存储/排队消息。无论您是使用共享数据库/文件还是编写充当邮件存储的第三个应用程序,都由您自己决定。无论哪种方式,你都会发现共享总会导致争用。

我个人会在MSMQ之前查看0MQ,但两者都不会解决您的问题。一个sqlite数据库将是我的第一选择。