高精確度的計時

有關Delphi 的語法, 程式, 等
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

高精確度的計時

文章 tim »

在一般的用途下, 使用 Now, 或是 GetLocalTime 來取得系統時間來計時, 應已足夠一般使用所需, 但是在更需要嚴格時間計數的狀況下, 如在 medai, network stream, 或是一些精確計量時間時, 會需要用到更精確的時間計數, 在 windows 下可以使用的方式可以透過這兩個 api 來進行,

QueryPerformanceFrequency
QueryPerformanceCounter

使用的方式就是先利用 QueryPerformanceFrequency 將一秒的高精確度計數器的次數取出. 再利用 QueryPerformanceCounter 分別取得計時開始和計時結束時的高精確度計數器的次數值差, 除以前面的值, 即可得到時間差的秒數.

另外也可以使用 RDTSC (Read Time Stamp Counter) 的指令, 但是這個指令和 cpu 的頻率有關, 所以必須是在知道該機器的處理器頻率才能有效的利用, 但就使用上來說, 確實是最準確的一種計時工具. (請參考這篇: http://delphi.ktop.com.tw/topic.asp?topic_id=23297)

利用上兩種計數器還有一個更有趣的應用, 就是可以反計算出 cpu 的頻率, 可以參考這篇:
http://bbs.toseek.info/cgi-bin/topic.cg ... 130&show=0

還有一篇也是和這個有關的文章: http://delphi.ktop.com.tw/topic.asp?topic_id=44874
多多留言, 整理文章, 把經驗累積下來.....
回覆文章