2010-10-07 96 views
1

我有一个C++应用程序需要与运行在同一台计算机上的C#应用​​程序(一个Windows服务)进行通信。我希望C++应用程序能够根据需要编写尽可能多的消息,而无需了解或关心C#应用程序何时读取它们,或者即使它正在运行。即使C++应用程序已关闭,C#应用程序也可以不时地唤醒并请求最新消息。什么是C++和C#应用程序之间异步通信的最简单方法

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

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

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

+0

我正在建议文件机制作为一种简单而有效的机制。 – ChrisF 2010-10-07 22:43:44

回答

1

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

+0

性能比什么好?在追加到作家应用程序中的文件,并在读取器应用程序中寻找启动时最后使用的读取位置,然后进行读取?无可否认,读者还必须定期锁定文件以清空它。 – 2010-10-07 23:50:53

+0

SQLite看起来像要走的路。它非常易于使用,它给了我需要的灵活性,以及​​我欣赏的简单性。 – 2010-10-08 12:17:08

0

MSMQ肯定听起来像你想要的,或者更基本的阅读和写作文件写入公共区域,但你需要观察文件争用。

VC++ help on MSMQ

2

我会使用一个命名管道。

0

这两个应用程序的需求并不总是同时运行,但仍然可以互相发送消息肯定意味着您需要第三个组件来存储/排队消息。无论您是使用共享数据库/文件还是编写第三个充当消息存储库的应用程序,都取决于您。无论哪种方式,你会发现共享总是引起争论。

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

相关问题