2009-12-07 46 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天递增回 为零。

相关问题