多媒体定时器的使用。

时间:2024-02-20 10:17:04

多媒体定时器与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);

至此  定时器设置结束。