定時器的精度問題

2021-06-14 12:28:27 字數 1103 閱讀 1526

摘自羅雲彬的《win32彙編教程》

由於windows的定時器同樣是基於時鐘中斷的,所以雖然引數的單位是ms,但精度還是55 ms,如果指定乙個小於55 ms的週期,不管是1 ms還是54 ms,windows最快也只能在每個時鐘中斷的時候觸發這個定時器,也就是說,實際上這個定時器是以55 ms為觸發週期的;另外,當指定乙個時間間隔的時候,windows以和這個間隔最接近的55 ms的整數倍時間來觸發定時器,假定建立乙個週期為1 000 ms的定時器,定時器的觸發週期實際上不是1 s而是989 ms(55 ms×18)。

invoke  getlocaltime,lpsystemtime

invoke  getsystemtime,lpsystemtime

invoke  gettickcount

它們之間的區別是:

gettickcount返回的是本次windows啟動以來的ms數,得到的時間數值直接在eax中返回,由於這是乙個32位的整數,可以表示的範圍是1~ffffffffh ms,所以當windows連續執行49.7天以後,計數器會清零並重新開始。

getlocaltime返回當前的時間,getsystemtime返回當前的格林威治標準時間,這兩個函式返回的時間資料報括年、月、日、時、分、秒、毫秒以及星期,資料比較多,所以無法放在eax中返回,應用程式需要預先設定乙個systemtime結構的緩衝區,並將緩衝區位址lpsystemtime當引數傳遞給函式,函式會把時間資料返回到這個緩衝區中。

systemtime結構的定義如下:

systemtime struct

wyear             word    ?;年

wmonth            word    ?;月

wdayofweek        word   ?;星期,0=星期日,1=星期一,……

wday              word    ?;日

whour             word    ?;時

wminute           word    ?;分

wsecond           word    ?;秒

wmilliseconds     word   ?;毫秒

systemtime ends

C 高精度定時器

ktimer.h windows graphics programming win32 gdi and directdraw feng yuan publisher prentice hall ptr first edition december 01,2000 高精度納秒計時器,最後修改 2008...

C 高精度定時器

windowsgraphicsprogrammingwin32gdianddirectdraw fengyuan publisher prenticehallptr firsteditiondecember01,2000 高精度納秒計時器,最後修改 usage intmain pragmaonce ...

Qt高精度定時器

一般而言,qt有兩種使用定時器的方式,qobject和qtimer,對於第一種需要重寫timerevent事件來實現,第二種需要宣告乙個qtimer的物件或指標,用qtimer timeout 訊號連線槽函式,設定定時器型別mtimer.settimertype qt precisetimer 第一...