2010-05-10 17 views
10

je veux une horloge en temps réel avec une précision de microsecondes comment puis-je le faire?comment obtenir une horloge en temps réel en C#?

Y at-il une horloge autre que le chronomètre?

+8

Pourquoi "autre que le chronomètre"? N'est-ce pas comme si je demandais: «Je veux stocker une chaîne, y a-t-il un type de chaîne autre que de la chaîne? –

+0

duplicata possible de [Chronomètre peut être utilisé dans le code de production?] (Http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code) – BFree

Répondre

15

Vous voulez System.Diagnostics.Stopwatch, qui peut mesurer les intervalles de temps avec précision à la microseconde (en fonction des limitations matérielles).

+2

+1: N'a pas connu le chronomètre . –

4

La minuterie la plus précise disponible dans .NET est StopWatch.

3

Pour une mesure de haute résolution, vous pouvez utiliser la fonction 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

Ceci est équivalent à la fonctionnalité dans System.Diagnostics.Stopwatch. –

+0

Chris a raison. Le chronomètre utilise le noyau 'QueryPerformanceCounter' kernel32 sous les couvertures, donc il n'y a aucune raison d'utiliser ce code (en utilisant .NET 2.0 ou supérieur). Ce code est toujours utile pour les pauvres âmes qui travaillent encore avec .NET 1.1. – Steven

7

System.Diagnostics.Stopwatch utilise les QueryPerformanceCounter et QueryPerformanceFrequency API Windows. La résolution n'est pas standard sur toutes les machines, mais généralement de l'ordre de la microseconde (voir this KB article pour plus d'informations).

Dans Vista/Win7, il y a également QueryProcessCycleTime et QueryThreadCycleTime qui vous donnera le nombre de cycles écoulés pour votre processus/thread. Ceci est utile si vous voulez connaître uniquement l'heure active du processus (par exemple, le moment où vous n'avez pas été désactivé).

0

Si vous voulez un bon temps de mesure, je pense que csharp comme un langage de haut niveau pourrait ne pas être une bonne idée. vous pourriez assembler un programme simple qui tape sur RTC, puis liez-le à votre programme via une bibliothèque. C'est littéralement le meilleur scénario possible que vous pouvez obtenir sans dépassement d'objet, mais il nécessite un peu de savoir-faire de bas niveau à mettre ensemble.

0

Si vous n'avez pas d'accès à Internet et que vous voulez un temps réel pour la licence d'essai minutée du logiciel, vous pouvez utiliser la clé USB avec l'horloge en temps réel.

Son calcul du temps est piloté par une horloge interne pilotée par batterie. Vous pouvez accéder à l'heure à partir de la clé USB en utilisant les fonctions API qui accompagnent ces types de clés.

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