2010-10-07 101 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數據庫將是我的第一選擇。

相關問題