多媒体定时器与ontimer的区别是优先级较高,定时精度较高,可达到1ms
多媒体定时器包含以下三个部分:
1 timeSetEvent() (相当于settimer)
2 timeKillEvent()(相当于killtimer)
3 回调函数(相当于系统自动添加的ontimer 在里面写上定时需要去做的事)
以下是实际使用多媒体定时器的一个例子:
在头文件中添加:
#include <mmsystem.h>
#pragma comment(lib,"winmm")
在头文件中声明:
static void PASCAL TimeProc1(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2); // 定时器回调函数
int TimerID; // 定时器ID
在回调函数中:
void CQuView::TimeProc1(UINT uID,UINT uMsg, DWORD dwUser,DWORD dw1,DWORD dw2){
CQuView *myview=(CQuView*)dwUser;
myview->Invalidate();
//静态函数不能访问非静态成员
}
由于回调函数是静态函数,因此采用指针访问非静态成员。循环去做的事是invalidate().
在需要启动定时器的地方:
TimerID=timeSetEvent(50, 1, (LPTIMECALLBACK)TimeProc1, (DWORD)this,TIME_PERIODIC);
在需要关闭定时器的地方:
timeKillEvent(TimerID);
至此 定时器设置结束。