執行緒中不能用updatedata()的解決辦法

2021-05-22 19:36:29 字數 1643 閱讀 5386

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

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

const uint wm_myupdatedata = ::registerwindowmessage(_t("myupdatedata"));

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

afx_msg void onupdatemydata(wparam wp, lparam lp);

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

on_registered_message(wm_myupdatedata,onupdatemydata)

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

void cdlg::onupdatemydata(wparam wp,lparam lp)

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

pdlg->sendmessage(wm_myupdatedata,true);

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

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

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

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

補充:

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

2、執行緒函式定義如下uint winapi workthread( 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 winapi workthread( lpvoid lpcontext ); 應用時可以這樣,

cyourdlg dlg;

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

在函式裡這樣寫:

cyourdlg* pdlg = ( cyourdlg* ) lpcontext;

if ( pdlg )

MySQL 只能用localhost不能用ip連線

如果本地主機能用ip連線,但其他計算機登陸不到,錯誤時10060時,一般是防火牆問題,關閉防火牆或允許3306埠即可 登入進去後用以下命令可以檢視許可權用 mysql use mysql mysql select user,host from user mysqluser,host from use...

藍芽不能用了

今天突然發現筆記本的藍芽不能用了,藍芽指示燈也沒有亮。使用 rfkill 檢查,發現被 block 了 rfkill list 0 tpacpi bluetooth sw bluetooth soft blocked yes hard blocked no 1 phy0 wireless lan s...

centos locate命令不能用

今日最小化安裝centos 6.0 完事後 用locate 查詢檔案 提示 bash locate command not found 那就先updatedb一下吧 提示 bash updatedb command not found baidu說updatedb 不能用先要安裝 slocate y...