2010-08-10 92 views
6

我有一個關於GetTickCount函數的問題, 我有兩個調用這個函數的代碼,它們之間有幾個命令,兩個調用中的函數都返回相同的計數。 即GetTickCount函數

var1 = GetTickCount(); 
code 
: 
: 
var2 = GetTickCount(); 

VAR1和VAR2在它具有相同的值。

有人可以幫忙嗎?

+0

一個很好的示例應用程序,這會很有幫助:http://capnbry.net/blog/?p= 44 – Ampere 2014-08-28 11:16:30

回答

14

假設這是在Windows GetTickCount呼叫,這是完全合理的:

所述的GetTickCount 函數的分辨率被限制爲系統計時器的分辨率 ,其是 通常在10 範圍毫秒到16毫秒。

請注意,這只是測量毫秒下手 - 你可以在毫秒這幾天做了一個可怕的很多。

該文檔繼續說:

如果需要更高的分辨率計時器, 使用multimedia timerhigh-resolution timer

也許QueryPerformanceCounter會更合適嗎?

+0

@johan Skeet但這樣解決系統定時器意味着什麼? – RidaSana 2011-12-17 17:27:26

+1

@小姐:你可以把它看作「有多頻繁的時鐘滴答」。 – 2011-12-17 18:18:44

5

如果您指的是Windows API調用,則請閱讀this。 我猜你正在嘗試時間很短的時間間隔,所以這一段是相關的。你計時比那個間隔短嗎?如果是這樣,也許可以查看QueryPerformanceCounter。

所述的GetTickCount 函數的分辨率被限制爲系統計時器的分辨率 ,其是 通常在10 毫秒到16毫秒的範圍內。 GetTickCount 函數的分辨率 不受 GetSystemTimeAdjustment函數作出的 調整。

1

GetTickCount的分辨率爲1毫秒(實際上,它是幾毫秒)。你所調用的函數很可能要花費1毫秒以內的時間。

+0

實際上更糟糕:大約10ms的分辨率 – jdehaan 2010-08-10 20:15:34

2

MSDN

所述的GetTickCount 函數的分辨率被限制爲系統計時器的分辨率 ,其是 通常在10 毫秒到16毫秒的範圍內。 GetTickCount 函數的分辨率 不受 GetSystemTimeAdjustment函數作出的 調整。

已用時間以DWORD 的值存儲。因此,如果系統連續運行 達49.7天,時間將會包圍 。要避免 這個問題,請使用GetTickCount64 函數。否則,當比較 次時,檢查 溢出情況。

如果您需要更高分辨率的定時器, 使用多媒體定時器或 高分辨率定時器。

5

如果轉到QueryPerformanceCounter路由,則需要注意依賴於硬件的wierdness。它已經有一段時間了,所以我不知道這些東西是否還會發生。

您可能還需要採取look at this link,因爲它具有比較QueryPerformanceCounter的,GetTickCount的和TimeGetTime

+0

這確實是徹頭徹尾的怪異行爲...... – RBerteig 2010-08-10 20:59:23

+0

不幸的是,與Nvidia的鏈接不再有效。有人找到了替代來源? – blerontin 2015-07-28 07:38:28

+1

@blerontin我更新了鏈接。第二個是使用網絡存檔。這是5年前,所以它可能無法在當前的硬件上工作。 – 2015-07-28 12:47:23

0
dwStartTimer=GetTickCount(); 
      dwEndTimer=GetTickCount(); 
      while((dwEndTimer-dwStartTimer)<wDelay)//5000 milli seconds delay 
      { 
       Sleep(200); 
       dwEndTimer=GetTickCount(); 
       if (PeekMessage (&uMsg, NULL, 0, 0, PM_REMOVE) > 0) //Or use an if statement 
       { 
        TranslateMessage (&uMsg); 
        DispatchMessage (&uMsg); 
       } 
      } 
+1

請詳細解釋爲什麼您的代碼能夠回答這個問題。 – Markus 2017-08-31 07:23:23