11 Windows程式設計 定時器

2022-03-19 06:07:39 字數 3447 閱讀 5203

週期性的傳送wwl_timer訊息的乙個東西,這個週期可以由程式設計師自己設定。

設定週期的數是settimer,停止定時器訊息傳送的函式是:killximer;

定時器訊息的特點:

1.不準確(也就是說,你設定的週期是1秒,那麼有可能在980毫秒的時候,這個wm_timer訊息就來了,也有可能1010毫秒的時候才來)

2.可能被合併(這個和wl_paint訊息類似);

settimer
uint_ptr winapi settimer(

_in_opt_ hwnd hwnd,

_in_ uint_ptr nidevent,

_in_ uint uelapse,

_in_opt_ timerproc lptimerfunc

);

hwnd:  指向乙個和定時器關聯的視窗。如果想改變乙個視窗原有定時器的週期,那麼這個bwnd必須傳遞null。

nidevent: 定時器的標識;

uelapse:   定義週期(毫秒)

lptimerfunc:指向乙個函式的指標,如果這個函式指標是null,那麼定時器週期性傳送wa_timer訊息給視窗,否則,定時器週期性的呼叫這個函式,不再傳送wm_timer訊息。函式原型:

timerproc
void callback timerproc(

_in_ hwnd hwnd,

_in_ uint umsg,

_in_ uint_ptr idevent,

_in_ dword dwtime

);

umsg:     l_timer

idevent:    定時器標識

dwtime:   系統啟動後,執行了多長時間(毫秒)

killtimer
bool winapi killtimer(

_in_opt_ hwnd hwnd,

_in_ uint_ptr uidevent

);

hwnd:和定時器關聯的視窗;

uidevent:定時器標識;

wm_timer

wparam:定時器標識

lparam:  指向**函式 timerproc的指標

實現定時器原始碼——法一:wm_timer

1 #include2 #include3 #include4 #include5

6#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 }

view code

實現定時器原始碼——法二:timerproc

1 #include2 #include3 #include4 #include5

6#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 }

view code

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 在定時程式設計有以下幾種介面...