Windows Timer定時器使用方法

2021-04-20 13:00:08 字數 1959 閱讀 4914

定時器在vc中的使用頻繁,以下討論定義器的使用方法。

定時器的原型是:

winuserapi uint winapi settimer ( hwnd hwnd , uint nidevent, uint uelapse, timerproc lptimerfunc);

hwnd       是欲設定定時器的窗體控制代碼。定時時間到時,系統會向該窗體傳送wm_timer訊息。

nidevent     定時器識別符號。在乙個窗體內可以使用多個定時器,不同的定時器根據nidevent來區分。

uelapse    定時時間,單位是毫秒。

lptimerfunc   定時器的**函式。如果該值為null,定時時間到時,定時器傳送的訊息wm_timer由窗體映像該訊息的函式處理;否則由**函式處理,說白一點,**函式就是取代ontimer的處理函式。

通常,我們在使用定時器時,只用到三個引數,即

uint cwnd::settimer(

uint nidevent,

uint nelapse,

void (callback export* lpfntimer)(

hwnd, uint, uint, dword) );

其實,這個函式只是mfc對api的封裝,其實現函式為:

_afxwin_inline uint cwnd::settimer(uint nidevent, uint nelapse,

void (callback* lpfntimer)(hwnd, uint, uint, dword))

由此可見,cwnd::settimer只是將api函式settimer的第乙個引數設定成它自己的控制代碼而已。

有了上面的認識,對定時器的使用就清楚了,下面舉例說明定時器的具體使用。

1.開啟vc,新建一基於對話方塊的工程,工程名為test。在對話方塊上新增一按鈕,將其id改為idc_button_start,caption改為 start. 映像該按鈕的bn_clicked訊息,void ctestdlg::onbuttonstart();

2.再在對話方塊上新增一按鈕,id為id_button_stop,caption改為stop,映像訊息為void ctestdlg::onbuttonstop();

3.新增乙個lable,id改為idc_static_time,用於記數,表明定時器函式的執行。

4.映像對話方塊的wm_timer訊息,void ctestdlg::ontimer(uint nidevent);

begin_message_map(cassistantdlg, cdialog)

on_wm_timer()

end_message_map()

以上的定現函式如下所示:

void ctestdlg::onbuttonstart()

void ctestdlg::onbuttonstop()

void ctestdlg::ontimer(uint nidevent)

**函式的使用。

如果不想使用窗體的wm_timer訊息函式處理,可以使用**函式來取代,讀者可以在上面例子的基礎上,增加乙個**函式,以證實前面的討論。

首先,定義乙個**函式,**函式的定義必須按照如下格式。

void callback timerproc(hwnd hwnd,uint umsg,uint idevent,dword dwtime );

我的實現函式如下:

void callback timerproc(hwnd hwnd,uint umsg,uint idevent,dword dwtime )

將上面的啟動函式稍做修改

void ctestdlg::onbuttonstart()

{

// settimer(1,1000,null);//啟動定時器1,定時時間是1秒

settimer(1,1000,(timerproc)timerproc);//用**函式處理,此時對話方塊的訊息處理函式不再處理。

Mysql 檢視定時器 開啟定時器 設定定時器時間

1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

Mysql 檢視定時器 開啟定時器 設定定時器時間

1 1.檢視是否開啟evevt與開啟evevt。23 1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。4 show variables like sche 5 1.2 開啟evevt功能 6 set global event ...