2015-08-28 35 views
0

我有一個應用程序A,我想與應用程序B分享一些信息。 應用程序每個寫入信息〜150ms。 應用程序B隨時讀取信息。QsharedMemory沒有Qt應用程序

我搜索了一下,發現QSharedMemory,看起來不錯,但是我的公司不開發應用程序B,所以我不能選擇編程語言。

QSharedMemory是個好主意嗎? 我該怎麼做?

+0

如果您對應用程序B的開發沒有任何控制/輸入,您可以將自己的部分編寫成任何你想要的東西,但是你通常需要提供某種類型的文檔或至少一個結構內存被讀入(如果不是API)。就我個人而言,我會使用其他類似增強功能的東西,並提供一個讀取數據的庫。無論如何,如果他們是客戶。這就是說,在一天結束時,它是RAM中的字節......讀者可以實現他們想要的東西。但它可能不是最好的方法。 –

回答

0

QSharedMemory是一個名爲和無名平臺共享內存的薄包裝。命名時,只要該文件支持二進制緩衝區,其他應用程序就可以使用任何編程語言進行內存映射和使用。

我想知道這是否會更容易,但是,如果你使用IPC管道。 QLocalSocket封裝在Qt的末尾,另一側只是使用本地管道。

只有在某些情況下,共享內存纔有意義,比如推送圖像,這些圖像在應用程序之間可能不會發生太大變化 - 從小到大,整個圖像的推動成本會受到限制平均帶寬的變化。圖像不需要意味着視覺圖像,它可能是一個工業過程映像等。

在很多情況下,共享內存是一種過早的僞優化,它使事情變得比必要的困難得多,並且可以大量溝通過程的情況下,變得悲觀化 - 您爲每個共享內存段支付虛擬內存的成本。

0

聽起來你需要實現一個簡單的服務器,使用本地套接字,它應該是非常快的帶寬和易於開發。服務器將採取行動存儲來自A的數據並根據請求將其傳送給B.

顯然,它不會在「無應用程序」之間工作。無論您是使用共享內存還是本地套接字,您都需要一些服務器代碼來隨時運行,以便爲A和B服務。如果A一直在運行,它可能是其中的一部分,但它也可以是獨立。

最好是使用本地套接字,因爲它的API在不同的編程語言中更具可移植性,在這種情況下,A和B可以用任意語言和框架實現,並在套接字協議層進行通信。使用QSharedMemory它不會在您的場景中具有便攜性。