2009-12-07 80 views
3

我很好奇.NET BCL屬性Environment.TickCount是如何實現的。特別是我想現在如果它受到system time adjustments的影響。Environment.TickCount是否受系統時間調整影響?

我對財產如何實施的第一次猜測是它僅僅是圍繞GetTickCount method的託管包裝。但是,GetTickCount方法的文檔指出,它受影響,由GetSystemTimeAdjustment函數進行調整,但Environment.TickCount的文檔沒有提及有關時間調整的任何內容。

我想弄清楚Environment.TickCount是否可以用作(儘管低精度)持續增加時間值。

回答

4

不,Environment.TickCount不受系統時間調整的影響。那是我的文檔的解釋,但我的好奇心要求很難證明,所以我有下面的代碼運行,同時調整系統來回1小時:

while (true) 
{ 
    Console.WriteLine(Environment.TickCount); 
    Thread.Sleep(1000); 
} 

...和輸出表現出完美的序列不受時間調整的影響。

更新
所以我做了一些功課多,由Marcus'在下面的意見問題引發的。我敢肯定(雖然無法證實),其Environment.TickCount進行調用以具有以下的文檔中提到GetTickCount

的GetTickCount的 功能的分辨率是有限的系統的分辨率 定時器,即 通常在10 毫秒到16毫秒的範圍內。 GetTickCount 函數的分辨率 也受 GetSystemTimeAdjustment函數作出的 調整。

所以,雖然它不影響通過改變系統時間,似乎由通過呼叫引起SetSystemTimeAdjustment調整的影響。

+0

(lang:sv Tack!)嘿,謝謝,只是好奇而已。如果您手動設置時間,您是否確定系統時間調整(GetSystemTimeAdjustment中描述的增量可怕類型文檔中時間運行速度更快或更慢)?當你這樣做時,系統時間不是直接跳到正確的時間? – 2009-12-07 10:38:33

+1

我不確定你從哪裏得到這個報價? [GetTickCount]的MSDN頁面(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v=vs.85%29.aspx)給我,「_GetTickCount函數**不是**受GetSystemTimeAdjustment函數調整_「 – ahmd0 2015-05-02 23:00:51

+0

良好的捕獲,@ ahmd0!我很好奇,所以我查了一下。看起來,該頁面在2010年8月更新,從我上面的引用改爲現在的內容。讓我想知道發生了什麼:文件是錯誤的還是行爲改變了? – 2015-05-04 06:50:17

2

不,它不受系統時間調整的影響。

是否適合「持續增加時間值」取決於您的確切要求。從MSDN documentation

該屬性的值被從系統定時器衍生 和存儲爲 一個32位帶符號整數。因此, 如果系統連續運行, TickCount將從零遞增到 Int32.MaxValue約 24.9天,然後跳轉到Int32.MinValue,這是一個 負數,那麼在接下來的24.9天遞增回 爲零。

相關問題