精确到1ms的定时器

Posted skdev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精确到1ms的定时器相关的知识,希望对你有一定的参考价值。

  
SetTimer()设置的定时器的定时时间>50ms,这在实时数据采集中是不够的。用多媒体定时器能精确到1ms,效果很好。
//定时器------------------------
#define            TIMER_ACCURACY        1
int                   TimerID;
UINT              wAccuracy;
int                   InitTimer();
int                   ReleaseTimer();
void PASCAL TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dwParam,DWORD dlParam);
 
int     InitTimer()
{
       TIMECAPS       tc;
 
       if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR) //获取系统的取值范围
       {
              wAccuracy=min(max(tc.wPeriodMin,TIMER_ACCURACY),tc.wPeriodMax);
              timeBeginPeriod(wAccuracy);
              return 1;
       }
       else
       {
              MessageBox(NULL,"定时器无法使用!",NULL,NULL);
              return 0;
       }
}
 
int ReleaseTimer()
{
       timeKillEvent(TimerID);
       timeEndPeriod(wAccuracy);
       return 1;
}
 
/*名称:TimerProc
 功能:定时处理
 参数:wTimerID定时器ID,msg消息参数,dwUser使用者,dwParam参数1,dlParam参数2
*/
void PASCAL TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dwParam,DWORD dlParam)
{
}
//打开定时器
TimerID=timeSetEvent(1000,wAccuracy,(LPTIMECALLBACK)TimerProc,(DWORD)0,TIME_PERIODIC);        //1000为定时时间,表示1000ms

以上是关于精确到1ms的定时器的主要内容,如果未能解决你的问题,请参考以下文章

在Java中如何实现较为精确的定时器

如何在VB中做精确度高的计时器??

用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语

STM32怎么实现精确控制PWM输出数量同时能改变频率

C#下利用高精度计时器进行计时操作

单片机中delay函数精确延时多少ms?