6.25.2007

SendMessage Hang.

遇到一個糟糕的問題:

UI 的 message handler 中 正在wait 一個 low priority thread的 semaphore。
這個low priority thread 此時 SendMessage( )給 UI。

導致 low priority thread hang 著 -- 應該說是UI和thread都Hang著。
直到 UI Handler 的wait timeout後,處理完low priority thread 的SendMessage( )後。
那個low priority thread 才有機會執行。


理論上..low priority thread 的SendMessage動作,只是將messasge放進 UI 的message queue中。
即使UI的priority 比較高,但是他的state 是Waiting,所以控制權應該要立刻交回low priority thread 才對呀。

OS做到這樣有點糟糕喔..有點 priority inversion 沒做好的感覺 (其實還沒到這裡)。

同樣的一句....還是我又在耍白痴?

的確,又是我在耍白痴。

感謝 Kun-Yi 的告知(ref comment),原來 SendMessage( )就是會block and wait return。
放到message queue的是PostMessasge( )。

依照Kun-Yi 所說的修改後,block 現象就消失了。

2 則留言:

Non-human 提到...

用PostMessage 咧?

用 SendMessage 應該會將 UI的優先權拉高. 因為你兩邊都在等對方結果吧? 這是我猜的


SendMessage 是放到 MsgQue.裡面
然後等對方結果吧?

PostMessage 只是放到MsgQue.裡面

checko 提到...

感感感激不盡。
照著您說的修改(SendMessage --> PostMessage),這個現象完全消失了!

果然是我耍白痴。 :p