2010-05-10 3 views
10

Я хочу часы реального времени с точностью до микросекунд, как я могу это сделать?Как получить часы реального времени в C#?

есть ли часы реального времени, кроме секундомера;

+8

Почему «кроме секундомера»? Разве это не похоже на вопрос: «Я хочу сохранить строку. Есть ли тип строки, отличный от строки?» –

+0

Возможный дубликат [Может ли секундомер использоваться в производственном коде?] (Http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code) – BFree

ответ

15

Вы хотите System.Diagnostics.Stopwatch, который может точно измерять интервалы времени до микросекунды (в зависимости от аппаратных ограничений).

+2

+1: не знал о секундомере , –

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. –

+0

Крис прав. Секундомер использует kernel32 'QueryPerformanceCounter' под обложками, поэтому нет смысла использовать этот код (при использовании .NET 2.0 или выше). Этот код по-прежнему полезен для тех бедных душ, которые все еще работают с .NET 1.1. – Steven

7

System.Diagnostics.Stopwatch использует QueryPerformanceCounter и QueryPerformanceFrequency для Windows API. Разрешение не является стандартным для машин, но обычно оно составляет порядка микросекунд (см. this KB article для получения дополнительной информации).

В Vista/Win7 есть также QueryProcessCycleTime и QueryThreadCycleTime, которые предоставят вам количество прошедших циклов для вашего процесса/потока. Это полезно, если вы хотите знать только активное время для процесса (например, время, когда вы не были отключены).

0

Если вы хотите хорошо провести время, я думаю, что csharp как язык высокого уровня может быть не очень хорошей идеей. вы можете собрать простую программу, которая вступает в RTC, а затем привязывает ее к вашей программе через библиотеку. Это буквально лучший возможный сценарий, который вы можете получить без вскрытия объекта, но для этого требуется некоторый уровень знаний о том, как собрать вместе.

0

Если у вас нет доступа в Интернет, и вы хотите получить реальное время для пробной лицензии на программное обеспечение, тогда вы можете использовать USB-ключ с часами реального времени.

Расчет его времени ведется внутренними часами, которые управляются батареей. Вы можете получить доступ к времени с USB-ключа, используя функции API, которые поставляются вместе с этими типами ключей.

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

Смежные вопросы