執行緒中使用UpdateData出錯解決方法

2021-06-27 11:34:47 字數 848 閱讀 6200

最近寫乙個程式,需要在自己建立的工作執行緒中更新視窗資料。在使用updatadata(false)來實現時,總是報錯,在網上搜了一下,才知道在

工作執行緒中不能使用updatedata來更新主線程中的資料

。介面的東西,最好就是用主線程(介面執行緒)去執行相應的操作。

要想在子執行緒(工作執行緒)裡執行介面執行緒的操作,最好是向主線程傳送訊息

。因為mfc的cwnd用到了tls,所以不是執行緒安全的。

解決辦法:

1.定義乙個訊息 #define wm_update_message (wm_user+200)

2.定義訊息對映

begin_message_map(ccserverdlg, cdialog)

//}afx_msg_map

end_message_map()

3. 定義訊息處理函式

// generated message map functions

//}afx_msg

declare_message_map()

4. 完成函式內容,只需呼叫updatedata()即可

lresult c***dlg::onupdatemessage(wparam wparam, lparam lparam)

5.執行緒中的呼叫

uint c***dlg::clientthread(lpvoid lpparam)

6.程式中呼叫

// cwinthread* pthread;

// static uint clientthread(lpvoid lpparm);

void ccserverdlg::onsstart() 

執行緒中使用UpdateData出錯解決方法

最近寫乙個程式,需要在自己建立的工作執行緒中更新視窗資料。在使用updatadata false 來實現時,總是報錯,在網上搜了一下,才知道在工作執行緒中不能使用updatedata來更新主線程中的資料。介面的東西,最好就是用主線程 介面執行緒 去執行相應的操作。要想在子執行緒 工作執行緒 裡執行介...

執行緒中使用UpdateData出錯解決方法

最近寫乙個程式,需要在自己建立的工作執行緒中更新視窗資料。在使用updatadata false 來實現時,總是報錯,在網上搜了一下,才知道在工作執行緒中不能使用updatedata來更新主線程中的資料。介面的東西,最好就是用主線程 介面執行緒 去執行相應的操作。要想在子執行緒 工作執行緒 裡執行介...

工作執行緒中使用UpdateData出錯解決方法

在工作執行緒中不能使用updatedata來更新主線程中的資料。介面的東西,最好就是用主線程 介面執行緒 去執行相應的操作。要想在子執行緒 工作執行緒 裡執行介面執行緒的操作,最好是向主線程傳送訊息。因為mfc的cwnd用到了tls,所以不是執行緒安全的。解決辦法 1.定義乙個訊息 define w...