2010-08-25 45 views
1

我想共享與多個進程數據。我第一次嘗試使用Point to point message queue和多個閱讀器,因爲我讀到P2P消息隊列非常快。廣播消息發送到多個進程(點對點消息隊列具有多個閱讀器)

在我的測試中,這似乎是多個讀者從同一隊列讀,一旦消息被一位讀者獲取,其他讀者將無法獲取同樣的信息。

什麼是更好的IPC共享數據的多個進程? 數據經常更新(每秒多次),所以我認爲WM_COPYDATA不是一個好的選擇,並會干擾「正常」的消息隊列。

我的第二次嘗試將可能是一個共享內存+互斥事件+

回答

2

點至點的隊列將正常工作。是的,當你發送,只有一個接收器將得到的消息發件人可以查詢隊列(通過調用GetMsgQueueInfo),看看有多少聽衆(在MSGQUEUEINFO的wNumReaders成員)也有,只是重複消息的次數。

+0

其實我已經想到了,但當時我不知道這些消息將交付同樣(循環賽)。而且,如果讀者線程中的一個決定從閱讀中暫時休息一會兒,並對收到的消息進行一些冗長的處理,那麼排隊的消息是否會被錯誤地傳遞給其他閱讀器並導致一些閱讀器多次收到相同的消息?我是否應該確保讀者不會從事兼職工作,只專注於閱讀信息?謝謝 – 2010-08-26 03:47:43

0

最後,對於多個線程或進程來說,打開相同的隊列以進行讀取訪問或寫入訪問是完全有效的。點對點消息隊列支持多個閱讀器和多個編寫器。例如,這種做法允許一個寫入器進程將消息發送到多個客戶端進程或多個寫入器進程以將消息發送到單個讀取器進程。然而,沒有辦法解決給特定讀者過程的信息。當進程或線程讀取隊列時,它將讀取下一個可用消息。也無法向多個讀者廣播消息。

編程的Windows Embedded CE 6.0開發人員參考,第四版,道格拉斯沸騰,頁304

儘管警告,ctacke的IDE似乎是罰款,我的用例。

警告:
我的隊列讀者需要Sleep(10)他們獲取他們的信息的共享,以允許其他讀者去獲取信息之後。沒有Sleep(),只有一個閱讀器進程通過等待被髮信號通知。