但是有一些限制,Thread的 Message Queue不是在Thread 產生就Create好的,只有在Thread 有 call 過 Message 相關 funciton 後,才會產生。
同時,在Thread 的 Message Queue未產生之前,PostThreadMessage( )給他的話,Message會被丟掉 (同時 return FALSE)。
MSDN 提供兩個方法來避免這個問題:
- PostThreadMessage的人check return value,fail 的話就Sleep( )一段時間,等 對方把 MessageQueue 開出來
- 利用同步機制(Event) 來同步雙方的動作。 收Message的Thread 啟動時就call一次 PeekMessage( )同時指定不拿出message,
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
經過這次呼叫,Thread 的 MessageQueue 就會被 Create,然後用 SetEvent( )通知要PostThreadMessage給他的Thread。範例。
- 收 Post 給 該 Thread 的 Window 的 Message
- 收 Post 給 該 Thread 的 Message
- 都收
沒有留言:
張貼留言