background image

    
  TIMECAPS   tc;   

  //通过函数 timeGetDevCaps

   

取出系统

  的分辨率取值范围(对 intel

   

系统,

  1~16 毫秒),//

   

如果无错则继续

  if(timeGetDevCaps(&tc,   sizeof(TIMECAPS))   

  ==   TIMERR_NOERROR)   
  {   

  //

   

分辨率的值不能超出系统的取值范围

  wAccuracy   =   min(max(tc.wPeriodMin,   

  TIMER_ACCURACY),tc.wPeriodMax);   
  //调用 timeBeginPeriod

   

函数设置定时器

  的分辨率,类似于 for

   

循环的步长

  timeBeginPeriod(wAccuracy);   

  //

   

设置定时器

  InitializeTimer();   

  }   
  }   

    
  CCureApp::~CCureApp()   

  {   
  //

   

结束时钟

  fout   <   <     "结束时钟"   <   <     endl;   
  //

   

删除两个定时器

  timeKillEvent(TimerID_1ms);   
  timeKillEvent(TimerID_2s);   

  //

   

删除设置的分辨率

  timeEndPeriod(wAccuracy);   

  }   
  

   

注:使用完的定时器及分辨率一定

  

   

要删除,否则系统会越来越慢。

    

  void CCureApp::InitializeTimer()   
  {   

  StartOneMilliSecondTimer();   
  StartTwoSecondTimer();   

  }   
    

  //

   

一毫秒定时器的回调函数,

  

   

类似于中断处理程序

  voidPASCAL//一定要声明为全局 PASCAL

   

函数,

  

   

否则编译会有问题

  OneMilliSecondProc(UINT wTimerID,   UINT   msg,   
  DWORD dwUser,   DWORD   dw1,   DWORD   dw2)   

  {   
  static int ms   =   0;//

   

定义计数器

  CCureApp *app   =   (CCureApp   *)dwUser;   
  //

   

取得系统时间以毫秒为单位

  DWORD   osBinaryTime   =   GetTickCount();   
  //

   

输出计数器值和当前系统时间到文件

  app-   >fout   <   <     ++ms   <   <     ":   1ms   :   "   
    <   <     osBinaryTime   <   <     endl;   

  }   
    

  //加装 1

   

毫秒定时器

  void   CCureApp::StartOneMilliSecondTimer()   

  {   
  if((TimerID_1ms   =   timeSetEvent(wTimerRes_1ms,   wAccuracy