procedure TFormTimerTimer(Sender: TObject);
begin
EditText := FloatToStr(sTimerCount);
sTimerCount:=sTimerCount;
end;
procedure TFormButtonClick(Sender: TObject);
begin
proEndCount;
//显示从开始记数到记数实际经过的时间
ShowMessage(´实际经过时间´+IntToStr(actTime)+´毫秒´);
end;
end
运行程序点击开始倒记时按钮程序开始秒倒记时由于上面的程序只涉及了记时器程序的原理而没有将错误处理加入其中所以不要等秒倒记时结束点击结束倒记时按钮可以结束倒记时这时在弹出对话框中会显示实际经过的时间(单位为毫秒)将三个文本框内的时间乘以再加上实际经过的时间越接近则记时精度越高
下面是在我的机器上的执行结果
从上面的结果看由Delphi的Timer控件建立的记时器的精度十分差无法在实际中使用而利用高性能频率记数法和多媒体计数器法的误差都在%以下考虑到程序中在文本框中显示时间对程序所造成的影响这个误差在应用中是完全可以忽略的
另外在运行程序时作者还发现一个问题如果在倒记时时拖动窗口文本框中的显示都会停止而当停止窗口拖放后多媒体记时器显示会跳过这段时间记时而其它两种记时器显示倒记时却还是从原来的时间倒数这说明多媒体记时器是在独立的线程中运行的不会受到程序的影响
综合上面的介绍和范例我们可以看到如果要建立高精度的记时器使用多媒体记时器是比较好的选择而高性能频率记数法比较适合计算某个耗时十分短的过程所消耗的时间(例如分析程序中某个被多次调用的程序段执行时间以优化程序)因为毕竟高性能频率记数的理论可以达到微秒级别Timer控件虽然精度比上面两者差很多但是它使用方便在要求不高的场合它还是最佳选择
(最后要说的是以上的结果都是在Windows X下获得的作者在Windows 下运行该程序时发现Timer控件的精度比在Windows X下要高出很多一般误差在%以下这说明Windows 是一个真正的多任务操作系统再加上Windows NT\的稳定性和易用性在工业控制或实时检测等领域是一个比较完美的平台)
[] [] [] []