多媒体定时器定时不准
我想用多媒体定时器定时10ms
void CFengyiDlg::OnButtonLink()
{
UINT nTimerRes, nTimerID;
TIMECAPS tc;
nTimerRes = 1;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS))==TIMERR_NOERROR)
{
if(nTimerRes!=min(max(tc.wPeriodMin, 1), tc.wPeriodMax))
return ;
}
if(timeBeginPeriod(nTimerRes)==TIMERR_NOERROR)//启动定时器精度
{
nTimerID = timeSetEvent(10, 1, CallBackFunc, NULL,TIME_PERIODIC);//启动定时器
}
}
在回调函数里面测试每次的定时时间
DWORD dwStart, dwStop ;
void PASCAL CallBackFunc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
dwStart = dwStop;
dwStop = GetTickCount() ;
int a=dwStop-dwStart;
}
测试结果如下:间隔设置为10ms,实际测量a为15或16ms
间隔设置为15ms,实际测量a为15或16ms
间隔设置为16ms,实际测量a为15或16ms
间隔设置为50ms,实际测量a为15或16ms或31ms
间隔设置为100ms,实际测量a为94ms
请问如何解释上面的实验结果?多媒体定时器定时间隔为10ms的误差是多少?