週期性的傳送wwl_timer訊息的乙個東西,這個週期可以由程式設計師自己設定。
設定週期的數是settimer,停止定時器訊息傳送的函式是:killximer;
定時器訊息的特點:
1.不準確(也就是說,你設定的週期是1秒,那麼有可能在980毫秒的時候,這個wm_timer訊息就來了,也有可能1010毫秒的時候才來)
2.可能被合併(這個和wl_paint訊息類似);
settimer
uint_ptr winapi settimer(hwnd: 指向乙個和定時器關聯的視窗。如果想改變乙個視窗原有定時器的週期,那麼這個bwnd必須傳遞null。_in_opt_ hwnd hwnd,
_in_ uint_ptr nidevent,
_in_ uint uelapse,
_in_opt_ timerproc lptimerfunc
);
nidevent: 定時器的標識;
uelapse: 定義週期(毫秒)
lptimerfunc:指向乙個函式的指標,如果這個函式指標是null,那麼定時器週期性傳送wa_timer訊息給視窗,否則,定時器週期性的呼叫這個函式,不再傳送wm_timer訊息。函式原型:
timerproc
void callback timerproc(umsg: l_timer_in_ hwnd hwnd,
_in_ uint umsg,
_in_ uint_ptr idevent,
_in_ dword dwtime
);
idevent: 定時器標識
dwtime: 系統啟動後,執行了多長時間(毫秒)
killtimer
bool winapi killtimer(hwnd:和定時器關聯的視窗;_in_opt_ hwnd hwnd,
_in_ uint_ptr uidevent
);
uidevent:定時器標識;
wm_timer:
wparam:定時器標識
lparam: 指向**函式 timerproc的指標
實現定時器原始碼——法一:wm_timer
1 #include2 #include3 #include4 #include5view code6#define second 1000
7#define minute 60000
8#define hour 3600000910
lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam);
1112
int winmain(hinstance hinst, hinstance tmp, lpstr szcmd, int
nshow)
1340
return0;
41}42lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)43;
48switch
(message)
4973
else
if (wparam == 2)74
78else
79 hour++;
80invalidaterect(hwnd, null, true);
81return0;
82case
wm_destroy:
83 killtimer(hwnd, 1
);84 killtimer(hwnd, 2
);85 killtimer(hwnd, 3
);86 postquitmessage(0
);87
return0;
88default:89
break;90
}9192return
defwindowproc(hwnd, message, wparam, lparam);
93 }
實現定時器原始碼——法二:timerproc
1 #include2 #include3 #include4 #include5view code6#define second 1000
7#define minute 60000
8#define hour 3600000
9int
second, minute, hour;
1011
lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam);
12void callback timerproc(hwnd hwnd, uint umsg, uint_ptr idevent, dword dwtime);
1314
int winmain(hinstance hinst, hinstance tmp, lpstr szcmd, int
nshow)
1542
return0;
43}44lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)45;
49switch
(message)
5077
78return
defwindowproc(hwnd, message, wparam, lparam);79}
8081
void callback timerproc(hwnd hwnd, uint umsg, uint_ptr idevent, dword dwtime)
8288
else
if (idevent == 2)89
93else
94 hour++;
95invalidaterect(hwnd, null, true);
96 }
Windows定時器程式設計
一般時控函式 vc程式設計師都會利用windows的wm timer訊息對映來進行簡單的時間控制 1.呼叫函式settimer 設定定時間隔,如settimer 0,200,null 即為設定200毫秒的時間間隔 2.在應用程式中增加定時響應函式ontimer 並在該函式中新增響應的處理語句,用來完...
程式設計之美 1 1 Windows控制CPU占有率
1.1 讓cpu占有率聽你指揮 題目 windows環境下,寫乙個程式控制cpu占有率,具體 cpu的占有率固定在50 為一條直線。cpu占有率為一條直線,具體引數可調。cpu占有率呈一條正弦曲線。解題思路 任務監控器下cpu占有率是1秒進行一次取樣的。讓cpu工作指定時間,休息指定時間就可以控制占...
linux 定時器程式設計
在編寫應用程式的時候,經常需要用到定時器。根據使用情況,定時器的基本行為分為2種 single shot timer和repeating timer single shot timer 從註冊到終止只執行一次。repeating timer每次終止後自動執行。linux 在定時程式設計有以下幾種介面...