VC/MFC 定時器設定及OnTimer使用
阿新 • • 發佈:2019-01-10
SetTimer(2,1000,NULL); //ID為2,定時1000ms
SetTimer(3,500,NULL); //ID為3,定時500ms
WINDOWS會協調他們的。當然OnTimer函式體也要發生變化,要在函式體內新增每一個timer的處理程式碼:
OnTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
}
在控制檯中使用定時器不能簡單的SetTimer了事,這在控制檯裡這種SetTimer的方式是有點麻煩的,需要自己寫訊息迴圈投遞WM_TIMER訊息。其實在控制檯裡可以使用多媒體時鐘來計時:
example:
//啟動計時器
MMRESULT nIDTimerEvent = timeSetEvent(
1000,//延時1秒
0,
TimeProc,
0,
(UINT)TIME_PERIODIC);
if( nIDTimerEvent == 0 )
cout<<"啟動計時器失敗"<<endl;
//回撥過程(時鐘到來,回撥函式被系統自動呼叫)
void CALLBACK TimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
)
{
cout<<"時鐘到來"<<endl;
}
當然了,你要是習慣於SetTimer,那就用SetTimer吧:
下面是我在Console下用SetTimer寫的一個例子:
#include
#include
using namespace std;
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime);
int main()
{
SetTimer(NULL,1,1000,TimeProc);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
}
SetTimer(3,500,NULL); //ID為3,定時500ms
WINDOWS會協調他們的。當然OnTimer函式體也要發生變化,要在函式體內新增每一個timer的處理程式碼:
OnTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
}
在控制檯中使用定時器不能簡單的SetTimer了事,這在控制檯裡這種SetTimer的方式是有點麻煩的,需要自己寫訊息迴圈投遞WM_TIMER訊息。其實在控制檯裡可以使用多媒體時鐘來計時:
example:
//啟動計時器
MMRESULT nIDTimerEvent = timeSetEvent(
1000,//延時1秒
0,
TimeProc,
0,
(UINT)TIME_PERIODIC);
if( nIDTimerEvent == 0 )
cout<<"啟動計時器失敗"<<endl;
//回撥過程(時鐘到來,回撥函式被系統自動呼叫)
void CALLBACK TimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
)
{
cout<<"時鐘到來"<<endl;
}
當然了,你要是習慣於SetTimer,那就用SetTimer吧:
下面是我在Console下用SetTimer寫的一個例子:
#include
#include
using namespace std;
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime);
int main()
{
SetTimer(NULL,1,1000,TimeProc);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
}