SetTimer函式的使用

2021-04-06 19:49:01 字數 4249 閱讀 1748

什麼時候我們需要用到

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)

}

SetTimer函式的使用

settimer函式的用法 1 用wm timer來設定定時器 先請看settimer這個api函式的原型 uint ptr settimer hwnd hwnd,視窗控制代碼 uint ptr nidevent,定時器id,多個定時器時,可以通過該id判斷是哪個定時器 uint uelapse,時...

SetTimer函式使用注意

該函式的原型宣告如下 uint ptr settimer hwnd hwnd,uint ptr nidevent,uint uelapse,timerproc lptimerfunc 第乙個引數hwnd 與該定時器關聯的視窗控制代碼。第二個引數nidevent 非0的定時器標示符。這兩個引數的關聯關...

有關SetTimer函式的用法

1 用wm timer來設定定時器 先請看settimer這個api函式的原型 uint ptr settimer hwnd hwnd,視窗控制代碼 uint ptr nidevent,定時器id,多個定時器時,可以通過該id判斷是哪個定時器 uint uelapse,時間間隔,單位為毫秒 time...