2012年7月25日 星期三

MFC自訂Message

最近發生在按件事件觸發後,執行到某個Thread,然後此Thread會做更新UI的動作,結果悲劇就產生了,DeadLock....

解決方式可以用自訂Message的方式來解決,如果Thread要更新UI,可以用PostMessage來取代。自訂Message的方式如下:

1. 先在Header檔訂義自訂的Message

#define WM_MY_MSG (WM_USER+ N)
[註] N為一個整數,來區別不同自訂的訊息

2. 加入處理此訊息的Function宣告
afx_msg LRESULT OnMyMSG(WPARAM wPararm, LPARAM lParam);

3. 在CPP檔加入消息映射
BEGIN_MESSAGE_MAP(CFactoryAPDlg, CDialog)
    ON_MESSAGE(WM_MY_MSG, OnMyMSG)
END_MESSAGE_MAP()

4. 實作OnMyMSG()


實作完後,就可以在Thread處理時,用PostMessage(WM_MY_MSG)來解決DeadLock的問題。

1 則留言: