2010-05-10 17 views
10

voglio un orologio in tempo reale con precisione di microsecondi come posso fare?come ottenere un orologio in tempo reale in C#?

c'è un orologio in tempo reale diverso dal cronometro;

+8

Perché "diverso dal cronometro"? Non è come chiedere "Voglio memorizzare una stringa: esiste un tipo di stringa diverso dalla stringa?" –

+0

possibile duplicato di [Può essere usato Cronometro nel codice di produzione?] (Http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code) – BFree

risposta

15

Si desidera System.Diagnostics.Stopwatch, che può misurare con precisione gli intervalli di tempo al microsecondo (a seconda delle limitazioni hardware).

+2

+1: non sapeva il cronometro . –

4

Il timer più preciso disponibile in .NET è StopWatch.

3

Per un misure ad alta risoluzione è possibile utilizzare la funzione 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

Questo è equivalente alla funzionalità in System.Diagnostics.Stopwatch. –

+0

Chris ha ragione. Il cronometro utilizza il kernel32 'QueryPerformanceCounter' sotto le copertine, quindi non vi è alcun motivo per utilizzare questo codice (quando si utilizza .NET 2.0 o versioni successive). Questo codice è ancora utile per quelle povere anime che lavorano ancora con .NET 1.1. – Steven

7

System.Diagnostics.Stopwatch utilizza le API di Windows e QueryPerformanceCounterQueryPerformanceFrequency. La risoluzione non è standard tra le macchine, ma generalmente è dell'ordine dei microsecondi (vedi this KB article per maggiori informazioni).

In Vista/Win7 c'è anche QueryProcessCycleTime e QueryThreadCycleTime che ti darà il numero di cicli trascorsi per il tuo processo/thread. Ciò è utile se si desidera conoscere solo il tempo attivo per il processo (ad esempio, quando non si è passati fuori).

0

Se si desidera un buon tempo di misurazione, penso che csharp come linguaggio di alto livello potrebbe non essere una buona idea. puoi assemblare un semplice programma che tocca su RTC e quindi legalo al tuo programma tramite una libreria. Questo è letteralmente il miglior scenario possibile che tu possa ottenere senza alcuna sporgenza di Oggetto, ma richiede un po 'di conoscenza di livello basso da mettere insieme.

0

Se non si dispone di accesso a Internet e si desidera in tempo reale la licenza di prova a tempo del software, è possibile utilizzare il dongle USB con orologio in tempo reale.

Il calcolo del tempo è guidato da un orologio interno alimentato a batteria. È possibile accedere all'ora dal dongle USB utilizzando le funzioni API associate a questi tipi di dongle.

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

Problemi correlati