2010-05-10 17 views
10

quiero un reloj de tiempo real con precisión de microsegundos ¿cómo puedo hacerlo?cómo obtener un reloj de tiempo real en C#?

¿Hay algún reloj en tiempo real que no sea el cronómetro?

+8

¿Por qué "other than stopwatch"? No es como preguntar: "Quiero guardar una cadena. ¿Hay algún tipo de cadena que no sea una cuerda?" –

+0

posible duplicado de [¿Se puede usar Cronómetro en el código de producción?] (Http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code) – BFree

Respuesta

15

Quiere System.Diagnostics.Stopwatch, que puede medir con precisión intervalos de tiempo de microsegundos (dependiendo de las limitaciones del hardware).

+2

+1: No sé sobre el cronómetro . –

4

El temporizador más preciso disponible en .NET es StopWatch.

3

una alta resolución de las mediciones que podría utilizar la función 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

Esto es equivalente a la funcionalidad en System.Diagnostics.Stopwatch. –

+0

Chris tiene razón. El cronómetro utiliza kernel32 'QueryPerformanceCounter' debajo de las portadas, por lo que no hay ninguna razón para usar este código (cuando se usa .NET 2.0 o superior). Este código todavía es útil para esas almas pobres que aún trabajan con .NET 1.1. – Steven

7

System.Diagnostics.Stopwatch utiliza los QueryPerformanceCounter y QueryPerformanceFrequency API de Windows. La resolución no es estándar en todas las máquinas, pero en general es del orden de microsegundos (consulte this KB article para obtener más información).

En Vista/Win7 también hay QueryProcessCycleTime y QueryThreadCycleTime que le darán la cantidad de ciclos transcurridos para su proceso/hilo. Esto es útil si solo desea conocer el tiempo activo del proceso (por ejemplo, la hora en que no se desconectó).

0

Si desea una buena medición de tiempo, creo que csharp como un lenguaje de alto nivel podría no ser una buena idea. podría armar un programa simple que aproveche RTC y luego vincularlo a su programa a través de una biblioteca. Ese es, literalmente, el mejor escenario posible que puede obtener sin sobreexposición de objetos, pero requiere un poco de conocimiento de bajo nivel para armar.

0

Si no tiene acceso a Internet y desea una licencia de prueba con tiempo de prueba en tiempo real, puede usar el dongle USB con reloj en tiempo real.

Su cálculo de tiempo es impulsado por un reloj interno que funciona con batería. Puede acceder a la hora desde el dongle USB mediante funciones API que vienen con estos tipos de dongles.

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

Cuestiones relacionadas