2010-12-07 83 views
2

我一直在研究幾個C++項目,其中涉及使用窗口消息來做一些簡單的IPC。在許多情況下,通過將數據放入共享內存段,然後通過調用SendMessage將指針傳遞到共享內存,會將一些額外數據與窗口消息一起傳遞。重新做這一切的時候很討厭,但通過發明又一IPC系統解決這個沉悶的重複之前,我想問:C/C++ for Windows中基於內存的輕量級IPC機制是什麼?

有一個現有的框架,滿足條件?:

  • 用C或C++編寫(我們在這裏使用MSVC)
  • 儘可能少依賴;在最好的情況下,它只是一些使用普通C++和Windows標準庫的源文件,並且可以直接編譯到應用程序/庫中。
  • 適用於Windows XP和更新
  • 是建立在窗口消息加一個共享內存段
  • 正確的錯誤報告將是非常需要的(遠程過程不見了,遠程進程不理解給定的消息,參數不匹配,等等)

對於它的價值,COM對我們來說並不是一個真正的選擇,因爲使用它非常痛苦(除非你開始在它的頂部使用所有我們想要避免的封裝)。我並不需要界面和所有這些東西;只是一種方便的方式,通過一些錯誤處理(來自最佳情況下的任意)參數來回發送消息。此外,我放棄了比我需要的更多的DBUS。

+1

boost :: interprocess? – karlphillip 2010-12-07 15:14:38

+0

我不明白COM爲什麼會很痛苦,特別是當你有ATL的時候(就像你在MSVC++上做的那樣)。 – 2010-12-07 16:47:54

+0

@Billy ONeal:ATL是我在編寫``時想到的COM之上的框架之一`,除非你開始在它的頂部使用我們想要避免的各種包裝。 – 2010-12-08 09:34:20

回答

2

雖然不符合您所有的標準,但ZeroMQ (http://www.zeromq.org/)可能值得一看。它小巧,簡單,快捷。它也給你消息傳遞的語義,這可能會有所幫助,取決於你正在使用的應用程序的類型

3

我已經成功地使用內存映射文件進行進程間通信。我喜歡它,主要是因爲它簡單,快速,並且可用於任何版本的Windows,您可能會遇到(當然,我懷疑它可以在Win9x上運行,但是......)

有一篇基礎文章http://msdn.microsoft.com/en-us/library/ms810613.aspx(1993年的writtin!)展示瞭如何使用它們。

2

這個問題在這個答案時差不多3歲,但我不能相信沒有人正式建議Boost.Interprocess

可用於WINAPI機制的輕量級,IPC和C++包裝。

相關問題