C 跨執行緒呼叫UpdateData

2021-07-29 18:26:31 字數 1794 閱讀 3487

用sendmessage的方式解決(菜鳥步驟)

1、在主窗體標頭檔案中用下列函式註冊windows訊息

const uintwm_myupdatedata = ::registerwindowmessage(_t("myupdatedata"));

2、在主窗體標頭檔案中的訊息對映函式申明處新增下列對映

afx_msg lresult onupdatemydata(wparam wp, lparam lp);

3、在主窗體cpp檔案中新增註冊函式在end_message_map()之前

on_registered_message(wm_myupdatedata,onupdatemydata)

4、在主窗體cpp檔案中新增函式

voidcdlg::onupdatemydata(wparam wp,lparam lp)

5、在所用執行緒中新增更新函式訊息,即進行了updatedata()

pdlg->sendmessage(wm_myupdatedata,true);

首先,把原來的訊息函式返回值型別改為lresult,函式內可以隨便寫個return true; 然後訊息函式的引數必須改寫成(wparamwparam,lparam lparam)而不論這兩個引數是否用得到;最後,訊息對映如on_message

(wm_message,& onmymessage)

mfc執行緒中不能用updatedata,怎麼解決(詳細).

獲得控制代碼,通過getwindowtext( hwnd, buffer, len );得到控制項內容。可以把父視窗指標作為引數傳到執行緒裡來獲取控制代碼。同理,可以通過setwindowtext設定內容。 

比如傳入的是對話方塊的指標pdlg,比如你已知id,那麼設定如下:pdlg->getdlgitem( id)->setwindowtext("你要設定的東西"); 

另一種方法是訊息處理,自定義訊息,然後執行緒內postmessage和引數,在你的外部來處理該訊息。 

補充: 

1、hwnd hwnd = ( cwnd*)pwnd->getdlgitem( id ); 

2、執行緒函式定義如下uint winapiworkthread( lpvoid lpcontext ); 應用時可以這樣, 

cyourdlg dlg; 

createthread(...,(引數)(lpvoid)&dlg ); 

在函式裡這樣寫: 

cyourdlg* pdlg = ( cyourdlg* ) lpcontext; 

if ( pdlg ) 

獲得控制代碼,通過getwindowtext( hwnd, buffer, len );得到控制項內容。可以把父視窗指標作為引數傳到執行緒裡來獲取控制代碼。同理,可以通過setwindowtext設定內容。

比如傳入的是對話方塊的指標pdlg,比如你已知id,那麼設定如下:pdlg->getdlgitem( id )->setwindowtext("你要設定的東西");

另一種方法是訊息處理,自定義訊息,然後執行緒內postmessage和引數,在你的外部來處理該訊息。

補充: 

1、hwnd hwnd = ( cwnd*)pwnd->getdlgitem( id ); 

2、執行緒函式定義如下uint winapiworkthread( lpvoid lpcontext ); 應用時可以這樣, 

cyourdlg dlg; 

createthread(...,(引數)(lpvoid)&dlg );

在函式裡這樣寫:

cyourdlg* pdlg= ( cyourdlg* ) lpcontext; 

if ( pdlg ) 

C 跨執行緒呼叫

問題 執行一下 報錯 大概意思就是跨執行緒操作,label沒法兒賦值 1.private void mainloop 8.解決方案 一 在5 6行中間新增以下 checkforillegalcrossthreadcalls false 禁止編譯器對跨執行緒訪問做檢查 二 使用deletgate in...

C 跨執行緒呼叫

private thread mythread private void form1 load object sender,eventargs e private void runsonworkerthread 如果您在 net framework 1.0版本中嘗試執行這段 也許會僥倖執行成功,或者...

C 跨執行緒呼叫控制項

在c 應用程式開發中,我們經常需要把ui執行緒和工作執行緒分開程式設計,為了防止介面停止響應。同時,我們也需要在工作執行緒中去更新ui介面的控制項,在clr的執行緒安全中並不允許我們直接在工作執行緒操作ui介面。因此,介紹以下三種方式進行跨執行緒操作ui。private void button2 c...