1. 程式人生 > >UpdateData線上程中出錯的解決辦法 .

UpdateData線上程中出錯的解決辦法 .

最近在寫一個監視程式,需要定時檢視共享記憶體中的各個值。於是在MFC中,首先開了一個執行緒,用的是boost的timer,每隔1秒讀取共享記憶體中的值,另外一個執行緒通過呼叫UpdateData(FALSE)將值顯示在介面上。但是在我除錯的時候發現,UpdateData一直報錯。

最後查了下,還是執行緒的問題,線上程中,不能直接用UpdateData來更新數值。解決的辦法,應該自己定義一個訊息,將UpdateData(FALSE)替換為SendMessage(WM_UPDATEDATA, FALSE)就可以了。具體的做法如下:

首先,定義訊息和回撥函式

加入函式對映

  1. #define  WM_UPDATEDATA  WM_USER + 1
  2. LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);  
  1. ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)  

最後,實現回撥函式

  1. LRESULT CXXXDlg::OnUpdateData(WPARAM wParam, LPARAM lParam)  
  2. {  
  3.     UpdateData(wParam);  
  4. return 0;  
  5. }