UINT TimerScanStart(LPTIMECALLBACK fptc,int TimeCycle,BOOL bTime_OneShot)
{
UINT TimeID = 0;
TIMECAPS tc;
if(::timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)
{
DWORD wAccuracy;
wAccuracy=min(max(tc.wPeriodMin,TIMER_ACCURACY),tc.wPeriodMax);
if(timeBeginPeriod(wAccuracy) == TIMERR_NOERROR )
{
// 参数 TIME_PERIODIC: 周期执行
if(TimeCycle >= wAccuracy && TimeCycle <= tc.wPeriodMax)
{
if(bTime_OneShot)
{//只执行一次
TimeID = ::timeSetEvent(TimeCycle,wAccuracy,fptc,(DWORD)this,TIME_ONESHOT);
}
else
{//周期执行
TimeID = ::timeSetEvent(TimeCycle,wAccuracy,fptc,(DWORD)this,TIME_PERIODIC);
}
}
timeEndPeriod(wAccuracy);
}
}
return TimeID ;
}
{
UINT TimeID = 0;
TIMECAPS tc;
if(::timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)
{
DWORD wAccuracy;
wAccuracy=min(max(tc.wPeriodMin,TIMER_ACCURACY),tc.wPeriodMax);
if(timeBeginPeriod(wAccuracy) == TIMERR_NOERROR )
{
// 参数 TIME_PERIODIC: 周期执行
if(TimeCycle >= wAccuracy && TimeCycle <= tc.wPeriodMax)
{
if(bTime_OneShot)
{//只执行一次
TimeID = ::timeSetEvent(TimeCycle,wAccuracy,fptc,(DWORD)this,TIME_ONESHOT);
}
else
{//周期执行
TimeID = ::timeSetEvent(TimeCycle,wAccuracy,fptc,(DWORD)this,TIME_PERIODIC);
}
}
timeEndPeriod(wAccuracy);
}
}
return TimeID ;
}
博客展示了TimerScanStart函数的代码,该函数可实现定时器功能。通过timeGetDevCaps获取定时器精度范围,根据参数设置定时器是只执行一次还是周期执行,最后返回定时器ID。
6667

被折叠的 条评论
为什么被折叠?



