在程序开发中常要实现计时与计时显示。在BCB中一般方式是利用Timer控件来进行计时。样例代码如下:
  void __fastcall TForm1::Timer1Timer(TObject   *Sender) {
// timer interval callback function
iTimerCount ++ ;
if ( iTimerCount > 1000 ) { Timer1->Enabled = false; }
}
  // timer interval callback function
iTimerCount ++ ;
if ( iTimerCount > 1000 ) { Timer1->Enabled = false; }
}
但Timer控件有两个缺陷:
  (1)其不是一个精确的计时器,其只能保证秒级的精确性,即只有设置其Interval属性为1000的倍数是才是比较准确的。
  (2)其运行级别很低,这样在多线程程序中会造成高级别线程堵塞了Timer线程从而造成计时不准确。
  认识到以上两点,可将Timer控件只作为时间显示来用,而不作为计时,在每次显示时获取当前时间,并用MilliSecondsBetween函数与开始计时时间进行比较,得到毫秒级的差值,然后进行格式化显示。
  样例代码如下:
  (1)开始计时代码:
    iTimerCount =   0;
startTime = Time();//< startTime 是一个 TDataTime 变量
  startTime = Time();//< startTime 是一个 TDataTime 变量
(2)计时代码:
    void __fastcall   TFrmMain::Timer1Timer(TObject *Sender) {
// timer interval callback function
double msValue = MilliSecondsBetween( Time(),startTime );
Label5->Caption = AnsiString( msValue / 1000.0 );
iTimerCount ++ ;
if ( iTimerCount > 1000 ) { Timer1->Enabled = false; }
}
  // timer interval callback function
double msValue = MilliSecondsBetween( Time(),startTime );
Label5->Caption = AnsiString( msValue / 1000.0 );
iTimerCount ++ ;
if ( iTimerCount > 1000 ) { Timer1->Enabled = false; }
}
0 评论:
发表评论