2018/12/24

Delphi in Depth. Windows Message vs Thread.

程式很忙


同事最近遇到程式運作流程不如預想的情形,來找我幫忙解決。

研究程式碼的過程中,發現他用到大量的 PostMessage / SendMessage,這是相當有趣的走向,同事解說是在於在 Event call Event 時,有時會因為 UI 刷新造成互相干擾進而發生例外,所以才這樣寫。

PostMessage 和 SendMessage 兩者差異說明如下:
Non Blocking 和 Blocking,也等同 Asynchronous (非同步) 和 Synchronous (同步) 的關係。

PostMessage 的場合:主程式 (Main Thread) 執行到此句時會把 Message 放進 Message Queue 裡 (可以視為 Sub Thread) 依序排好,等待 Main Thread Idle 時才會把 Message Queue 依序派送到主程式的對應函式處理。

程式流程如下: