2013-01-17 33 views
-4

需要一個高精度的時間戳.NET函數高精度時間戳吸氣,返回毫秒爲單位的Int64

我已經使用WINAPI TimeGetTime。但它使用Int32,週期每49.8天和回報可以signed

什麼是原生.NET高精度函數返回類型爲Int64UInt64,返回毫秒?

並不重要是否返回從系統啓動時或過去任何時候毫秒。

其實我並不需要StopWatch

編輯:
我的應用程序是多線程的。應該爲每個線程創建StopWatch實例。 StopWatch有一個非常高精度的計時器。我只需要1-5ms。 我需要的是類似timeGetTime/Environment.TickCount的Int64或DateTime.Ticks,更新分辨率爲1-5ms

+7

我想你需要'Stopwatch'。 – SLaks

+0

'DateTime.UtcNow'是低精度(〜16ms的典型值),但因此它'TimeGetTime'。對於高精度,你需要'StopWatch',但它也有一些問題,比如某些(破碎的)硬件上的內核之間的desyncs。 – CodesInChaos

+0

「其實我不需要秒錶」 - 爲什麼不呢,這是最接近你想要什麼。 –

回答

1

如果您使用的是Windows 8或Server 2012中或更高版本,使用GetSystemTimePreciseAsFileTime如下:

[DllImport("Kernel32.dll", CallingConvention = CallingConvention.Winapi)] 
static extern void GetSystemTimePreciseAsFileTime(out long filetime); 

public DateTimeOffset GetNow() 
{ 
    long fileTime; 
    GetSystemTimePreciseAsFileTime(out fileTime); 
    return DateTimeOffset.FromFileTime(fileTime); 
} 

這有很多很多更好的精度比DateTime.UtcNow.Ticks

查看MSDN瞭解更多信息:http://msdn.microsoft.com/en-us/library/windows/desktop/hh706895(v=vs.85).aspx

0

您可以使用DateTime.UtcNow.Ticks。這實際上比毫秒更精確。

+0

您將_precision_與_accuracy_混淆。 DateTime.Now在毫秒內不準確。 – SLaks

相關問題