李國帥編2006.8
最簡單的方法是這樣使用,這樣就不用擔心因為子視窗阻塞導致系統無法銷毀。
在傳送端和接收端都首先要定義訊息
如果使用者需要乙個定義整個系統唯一的訊息,可以呼叫sdk函式registerwindowmessage定義訊息:
//註冊的方法在兩個地方都要註冊。
static uint wm_my_message = registerwindowmessage("
user");
uint um_messageid = ::registerwindowmessage(_t("
message description
"));
並使用on_registered_message巨集指令取代on_message巨集指令。
或者直接定義乙個訊息id,使用者自定義訊息至少是wm_user+100,可以放在resource.h中。
#define um_messageid wm_user + 500
演算法部分
在需要發訊息的地方使用 sendmessage 或者 postmessage
視窗部分
在類標頭檔案的afx_msg塊中定義訊息處理函式
//}afx_msg
declare_message_map()
實現訊息處理函式,該函式使用wpram和lparam引數並返回lpesult
lresult cmainframe::onmymessage(wparam wparam, lparam lparam)
第四步:在使用者類的訊息塊中,使用on_message巨集指令將訊息對映到訊息處理函式中。
將訊息和該函式繫結
begin_message_map(cmainframe, cmdiframewnd)//}afx_msg_map
end_message_map()
我這樣測了乙個訊息視窗
afx_msg lresult onumgrabinfo(wparam wparam, lparam lparam);//.hon_message(um_infoid, onumgrabinfo) //
非註冊方法
//.cpp
#define um_infoid wm_user + 1979//
resource.h
傳送類告知目標視窗需要關閉
sendmessage(m_hinfownd, um_infoid, null, null);dword result;
sendmessagetimeout(wnd->m_hwnd, //
目標視窗
wm_my_message, //
訊息0, //
wparam
0, //
lparam
smto_abortifhung |smto_normal,
timeout_interval,
&result);
以避免其它程序如果被阻塞而造成系統死等狀態。
//wparam通常傳遞全域性物件指標,lparam傳遞乙個臨時指標,在vc中都一樣,但是在其他的語言只有lparam能夠正確傳遞。
lresult cgwservertestdlg::onloginmsg(wparam wparam, lparam lparam)}return0;
}
檢視阻塞的程序和被阻塞的程序
檢視阻塞的程序和被阻塞的程序 select from master.sysprocesses where db name dbid golddb and spid spid and dbid 0 and blocked 0 select request session id spid,object ...
UPDATE 時, 如何避免資料定位處理被阻塞
問題描述 資料庫pubs 中的authors 表,想鎖定 city 為aaa 的記錄,為什麼執行下面的命令後,city 為bbb 的記錄也被鎖定了,無法進行 update.begin transaction select from authors with holdlock where city a...
UPDATE 時, 如何避免資料定位處理被阻塞
問題描述 資料庫pubs中的authors表,想鎖定city為aaa的記錄,為什麼執行下面的命令後,city為bbb的記錄也被鎖定了,無法進行update.begin transaction select from authors with holdlock where city aaa 如何才能鎖...