SetTimer定時器的用法

2021-04-17 19:27:27 字數 3145 閱讀 5513

什麼時候我們需要用到settimer函式呢?當你需要每個一段時間執行一件事的的時候就需要使用settimer函式了。 使用定時器的方法比較簡單,通常告訴windows乙個時間間隔,然後windows以此時間間隔週期性觸發程式。通常有兩種方法來實現:傳送wm_timer訊息和呼叫應用程式定義的**函式。

1.1 用wm_timer來設定定時器

先請看settimer這個api函式的原型

uint_ptr settimer(

hwnd hwnd,              // 視窗控制代碼

uint_ptr nidevent,      // 定時器id,多個定

//時器時,可以通過該id判斷是哪個定時器

uint uelapse,           // 時間間隔,單位為毫秒

timerproc lptimerfunc   // **函式

);例如

settimer(m_hwnd,1,1000,null); //乙個1秒觸發一次的定時器

在mfc程式中settimer被封裝在cwnd類中,呼叫就不用指定視窗控制代碼了

於是settimer函式的原型變為:

uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))

當使用settimer函式的時候,就會生成乙個計時器。函式中nidevent指的是計時器的標識,也就是名字。nelapse指的是時間間隔,也就是每隔多長時間觸發一次事件。第三個引數是乙個**函式,在這個函式裡,放入你想要做的事情的**,你可以將它設定為null,也就是使用系統預設的**函式,系統預設認的是ontime函式。這個函式怎麼生成的呢?你需要在需要計時器的類的生成ontime函式:在classwizard裡,選擇需要計時器的類,新增wm_time訊息對映,就自動生成ontime函式了。然後在函式裡新增**,讓**實現功能。每隔一段時間就會自動執行一次。

例: settimer(1,1000,null);

1:計時器的名稱;

1000:時間間隔,單位是毫秒;

null:使用ontime函式。

當不需要計時器的時候呼叫killtimer(nidevent);

例如:killtimer(1);

1.2 呼叫**函式

此方法首先寫乙個如下格式的**函式

void callback timerproc(hwnd hwnd,uint nmsg,uint ntimerid,dword dwtime);

然後再用settimer(1,100,timerproc)函式來建乙個定時器,第三個引數就是**函式位址。

二. 或許你會問,如果我要加入兩個或者兩個以上的 timer怎麼辦?

繼續用settimer函式吧,上次的timer的id是1,這次可以是2,3,4。。。。

settimer(2,1000,null);

settimer(3,500,null);

嗯,windows會協調他們的。當然ontimer函式體也要發生變化,要在函式體內新增每乙個timer的處理**:

ontimer(nidevent) }

什麼時候我們需要用到settimer函式呢?當你需要每個一段時間執行一件事的的時候就需要使用settimer函式了。 使用定時器的方法比較簡單,通常告訴windows乙個時間間隔,然後windows以此時間間隔週期性觸發程式。通常有兩種方法來實現:傳送wm_timer訊息和呼叫應用程式定義的**函式。

1.1 用wm_timer來設定定時器

先請看settimer這個api函式的原型

uint_ptr settimer(

hwnd hwnd,              // 視窗控制代碼

uint_ptr nidevent,      // 定時器id,多個定時器時,可以通過該id判斷是哪個定時器

uint uelapse,           // 時間間隔,單位為毫秒

timerproc lptimerfunc   // **函式

);例如

settimer(m_hwnd,1,1000,null); //乙個1秒觸發一次的定時器

在mfc程式中settimer被封裝在cwnd類中,呼叫就不用指定視窗控制代碼了

於是settimer函式的原型變為:

uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))

當使用settimer函式的時候,就會生成乙個計時器。函式中nidevent指的是計時器的標識,也就是名字。nelapse指的是時間間隔,也就是每隔多長時間觸發一次事件。第三個引數是乙個**函式,在這個函式裡,放入你想要做的事情的**,你可以將它設定為null,也就是使用系統預設的**函式,系統預設認的是ontime函式。這個函式怎麼生成的呢?你需要在需要計時器的類的生成ontime函式:在classwizard裡,選擇需要計時器的類,新增wm_time訊息對映,就自動生成ontime函式了。然後在函式裡新增**,讓**實現功能。每隔一段時間就會自動執行一次。

例: settimer(1,1000,null);

1:計時器的名稱;

1000:時間間隔,單位是毫秒;

null:使用ontime函式。

當不需要計時器的時候呼叫killtimer(nidevent);

例如:killtimer(1);

1.2 呼叫**函式

此方法首先寫乙個如下格式的**函式

void callback timerproc(hwnd hwnd,uint nmsg,uint ntimerid,dword dwtime);

然後再用settimer(1,100,timerproc)函式來建乙個定時器,第三個引數就是**函式位址。

二. 或許你會問,如果我要加入兩個或者兩個以上的 timer怎麼辦?

繼續用settimer函式吧,上次的timer的id是1,這次可以是2,3,4。。。。

settimer(2,1000,null);

settimer(3,500,null);

嗯,windows會協調他們的。當然ontimer函式體也要發生變化,要在函式體內新增每乙個timer的處理**:

ontimer(nidevent) }

VC定時器的用法 SetTimer和Ontimer

settimer是設定乙個計時器並開始執行計時器ontimer中的 ontimer是計時器所執行的 killtimer用於停止計時器。settimer是設定,ontimer是響應settimer訊息的。settimer函式的用法 1 用wm timer來設定定時器 先請看settimer這個api函...

VC定時器的用法 SetTimer和Ontimer

settimer是設定乙個計時器並開始執行計時器ontimer中的 ontimer是計時器所執行的 killtimer用於停止計時器。settimer是設定,ontimer是響應settimer訊息的。settimer函式的用法 1 用wm timer來設定定時器 先請看settimer這個api函...

C 定時器的用法

關於c 中timer類 在c 裡關於定時器類就有3個 1.定義在system.windows.forms裡 2.定義在system.threading.timer類裡 3.定義在system.timers.timer類裡 1.using system using system.collections...