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\的穩定性和易用性在工業控制或實時檢測等領域是一個比較完美的平台)
[] [] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25029.html