2010-05-10 47 views
10

我想要一個精度爲微秒的實時時鐘,我該怎麼做?如何在C#中獲得實時時鐘?

是否有除秒錶以外的實時時鐘;

+8

爲什麼 「除了秒錶」?是不是像問:「我想存儲一個字符串,是否有字符串類型而不是字符串?」 – 2010-05-10 06:25:58

+0

可能重複的[可以在生產代碼中使用秒錶?](http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code) – BFree 2010-05-10 18:48:55

回答

15

你想要System.Diagnostics.Stopwatch,它可以精確測量時間間隔到微秒(取決於硬件限制)。

+2

+1:不知道秒錶。 – 2010-05-10 05:49:52

3

對於您可以使用QueryPerformanceCounter功能的高分辨率測量:

class Program 
{ 
    [DllImport("kernel32.dll")] 
    private static extern void QueryPerformanceCounter(ref long ticks); 

    static void Main() 
    { 
     long startTicks = 0L; 
     QueryPerformanceCounter(ref startTicks); 

     // some task 

     long endTicks = 0L; 
     QueryPerformanceCounter(ref endTicks); 
     long res = endTicks - startTicks; 
    } 
} 
+3

這相當於System.Diagnostics.Stopwatch中的功能。 – 2010-05-10 06:28:00

+0

克里斯是對的。 Stopwatch使用封面下方的kernel32'QueryPerformanceCounter',所以沒有理由使用此代碼(使用.NET 2.0或更高版本時)。這段代碼對於仍在使用.NET 1.1的可憐靈魂仍然有用。 – Steven 2010-05-10 08:31:37

0

如果你想要一個很好的時間測量,我認爲csharp作爲高級語言可能不是一個好主意。你可以組裝一個簡單的程序,切換到RTC,然後通過庫將其綁定到你的程序。這實際上是最好的情況下,你可以得到沒有對象懸而未決,但它需要一些低水平知道如何放在一起。

0

如果您沒有互聯網訪問,並且您想要實時軟件的計時試用許可證,那麼您可以使用帶有實時時鐘的USB加密狗。

它的時間計算由電池驅動的內部時鐘驅動。您可以使用與這些類型的加密狗一起使用的API函數從USB加密狗訪問時間。

EX- http://www.senselock-europe.com/en/elite-el-rtc-dongle.html