我需要一些正確的編碼建議:好編碼? (多消息循環)
我正在使用多個串行連接的程序。每條通信線路都有一個控制器作爲抽象層。在控制器和串行端口之間插入一個協議,將數據封裝在包中,準備傳輸。該協議負責處理失敗的傳送,重新發送等。 爲確保GUI不會掛起,每條連接線(協議和串行端口)都在單獨的線程上創建。控制器由主線程處理,因爲它在GUI中具有控件。當我創建線程時,我選擇在它們上創建一個消息循環(Application.Run()),因此,如果沒有工作輪詢緩衝區併產生結果,我只需調用線程(BeginInvoke)並使用消息循環作爲緩衝區。目前這個工作很好,至今沒有嚴重的問題。
我現在的問題是:這是「好的編碼」,或者我應該使用一個while循環的輪胎,而不是輪詢緩衝區?或第三件事?
我想展示代碼,但到目前爲止它已經有數千行代碼,所以如果您需要查看代碼的任何部分,請詳細說明。 :)
謝謝。
不是,不。 WM_COPYDATA適用於進程之間的通信。使用它在一個進程內的線程間通信毫無意義。只需通過指針傳遞緩衝區/ blob /任何對象就簡單多了,例如。通過將* Buffer轉換爲消息。lParam,PostMessage()並在「另一端」回退。 – 2012-07-25 08:27:25
Windows消息隊列已針對通信TO GUI線程進行了優化。從GUI線程到非GUI工作線程的通信不是最佳的。即使是一個簡單的基於信號量的,非優化的生產者 - 消費者隊列,其速度比WMQ快四倍。在大多數應用中,P-C隊列性能通常不是問題。 – 2012-07-25 08:32:23
我同意這兩點。我將編輯出WM_COPYDATA;我沒有清楚地思考。關於消息隊列,這是一個廣義的基於事件的解決方案。根據他的應用程序的要求,其他模型可能會更好。 – tenfour 2012-07-25 08:38:25