1. 程式人生 > >使用PostThreadMessage向傳送執行緒訊息失敗的解決方法

使用PostThreadMessage向傳送執行緒訊息失敗的解決方法

問題描述:

PostThreadMessage 可用於執行緒間的資訊互動。 在使用CreateThread 建立訊息後,向已建立的執行緒傳送訊息時,執行緒中的GetMessage()無法接收到執行緒。 GetMessage是一個訊息阻塞函式,當執行緒佇列中沒有訊息時該函式始終處於阻塞的狀態,直到有新的訊息到來。 剛建立完執行緒後, 該執行緒的 訊息佇列還未建立,必須使用GetMessage等函式執行後訊息佇列才能建立。  因此這時使用  PostThreadMessage 傳送訊息執行緒是無法收到的。 

解決方法:

在建立執行緒的父執行緒中,當呼叫CreateThread 後,將將執行緒掛起n ms. 

WaitForSingleObject(childthreadid,n);  這樣在福執行緒掛起n ms後,再呼叫PostThreadMessage傳送執行緒訊息,子執行緒就可以接收到訊息了.