定時器在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 ...