2010-08-15 184 views
2

我正在製作一個嵌入了一個小型RARP服務器(用winpcap/pcap實現)並運行2個TCP IP服務器的交叉平臺程序。我必須使用C++。異步線程間通信

所以我至少要有4個線程,主控制器,2個TCP/IP異步套接字和RARP服務器。

我打算使用C++ BOOST Asio和Thread,因爲我需要在Linux和Windows XP中運行這個程序。 (我不能使用Qt)

我會執行異步的線程間通信。

對於一個循環內爲例火災事件,而阻塞循環

我怎樣才能做到這一點?最好帶有便攜式圖書館。

謝謝

+4

我想如果你問這個問題的更窄版本,你會有更好的運氣得到答案。你在這裏有幾個問題,有些與別人沒有關係......它非常分散。 – SoapBox 2010-08-15 10:46:16

回答

3

有沒有通用的解決方案,這一點,你不能只中斷一個線程,並提供待處理的通知。這會導致可怕的重入問題和大量的僵局。只有當線程處於靜止狀態時才能處理通知。

操作系統通常具有使其成爲可能的服務。在Windows中,這通常是通過向消息隊列發佈消息來完成的。通過消息循環讀取,這是UI線程的「空閒」狀態。或者通過利用異步過程調用,在線程阻塞並顯式允許APC運行時觸發。

但是,您通過要求非平臺特定的解決方案來減少這種情況。在這種情況下,你幾乎註定要重新發明操作系統功能。您需要一個線程安全隊列,您需要在需要接收通知的線程中進行輪詢。消息隊列,由消息循環讀取。

+0

因爲我已經使用boost asio,所以使用boost asio io_service對象進行異步函數調用。謝謝。 – MiniScalope 2010-08-20 12:23:00

2

看看ICE messaging

它支持進程之間syncrhonous和asyncrounous消息是否是同一個節點上與否。

有C++,Obj-C,Java,C#,Python,Ruby和PHP的綁定。