2012-12-22 47 views
0

我正在設計一個C++應用程序,它由基本上獨立的插件或模塊組成,這些插件或模塊不時產生對其他插件有用的結果。例如,分析模塊會遇到一些有用的數據並將其發送到操作模塊。每個模塊將運行在它自己的線程中;這是因爲分析模塊可以繼續收集數據,而動作模塊可以以它們可以處理的速度處理數據。多線程C++應用程序中的插件/模塊通信方法

我正在尋找合適的消息傳遞架構/設計模式。 This stackoverflow thread提供了一些建議,但我不確定一個普通的界面將在多線程環境中工作。

我正在考慮建立某種基於通道的架構,其中每個模塊都在通道上以及哪個模塊感興趣的地方廣播了一些東西 - 監聽。如果在自由許可下有一些現成的圖書館 - 效果會更好。

回答

1

您可能有興趣看看ZeroMQ庫,它也像併發框架一樣工作。使用這個庫,你的組件將通過發送消息到指定的ZeroMQ套接字來相互通信。有許多套接字類型(TCP,IPC,inproc)和幾種可用於請求回覆和發佈 - 訂閱消息的模式。

2

我一直在使用ACE(自適應通信環境)進行線程管理,TCP/UDP通信,互斥關係和編程。

ACE是一個高度可移植的平臺核心模式調用集合。最重要的是,它是免費的,開源的,目前正在積極開發中。

http://www.cs.wustl.edu/~schmidt/ACE.html

爲您的應用,我會建議專門針對上課還是「ACE_Task_Base」提供多線程和「ACE_Reactor」進行註冊的所有處理程序的異步回調架構。