background image

一、

VC 实现高精度定时器__基本流程

  1、头文件包含

#include   "mmsystem.h"   

    
  2、类成员中添加变量

UINT   m_iTimerId; //

   

定时器句柄

    
  3、创建回调函数,响应定时器事件

void   CALLBACK   CatchTimer

( UINT

IDEvent,

  UINT

uReserved,

  DWORD

dwUser,

  DWORD

dwReserved1,

  DWORD

dwReserved2) 

{  //

  

在这里写定时器事件的处理

}   

    

  4、开始启动定时器

//设置定时器分辨率,1ms   

timeBeginPeriod(1);   

//产生间隔 100

   

毫秒,周期执行的定时器事件;启动定时器

 m_iTimerId=timeSetEvent(1,100,CatchTimer,(DWORD)this-

>m_hWnd,TIME_PERIODIC);   
    

    
  5

   

、结束使用定时器

//

   

删除定时器事件

if(m_iTimerId)   

timeKillEvent(m_iTimerId);   
//

   

清除定时器分辨率

timeEndPeriod(1);   

设置两个时钟定时器,一个间隔是

1 毫秒,一个间隔是 2 秒,

每执行一次,输出当前系统时钟值到文件

cure.out”

 

,以 比较此定时器的精确度。

(此程序在中文

windows95 及 Microsoft VC5.0

     

编译通过。只节取与定时器有关的部分程序。)

#include   <   stdio.h   >   
  //

   

包含所用系统函数的头文件,

  

   

如果编译有问题,可调整此语句的位置

  #include   <   mmsystem.h   >   

    
  //定义 1 毫秒和 2

   

秒时钟间隔,以毫秒为单位

  #define ONE_MILLI_SECOND1   
  #define TWO_SECOND 2000   

  //

   

定义时钟分辨率,以毫秒为单位

  #define TIMER_ACCURACY1   

    
  UINT   wTimerRes_1ms,wTimerRes_2s;     //

   

定义时间间隔

  UINT   wAccuracy;//

   

定义分辨率

  UINT   TimerID_1ms,TimerID_2s;//

   

定义定时器句柄

    
  CCureApp::CCureApp()   

  :   fout("cure.out",   ios::out)//

打开输出文件

cure.out”   

  {   

  //   TODO:   add   construction   code   here,   
  //   Place   all   significant   

                initialization   in   InitInstance   
  //

   

给时间间隔变量赋值

  wTimerRes_1ms   =   ONE_MILLI_SECOND ;   
  wTimerRes_2s   =   TWO_SECOND;