Какова точность GetLocalTime, Kernel32.dll, Windows 7? - PullRequest
0 голосов
/ 21 февраля 2012

Я хочу получить наиболее точное (с точностью до 1 мс) время суток.Я видел этот пример, который использует GetLocalTime:

using System;
using System.Runtime.InteropServices;    

[StructLayout(LayoutKind.Sequential)]
public class SystemTime
{
    public ushort year;
    public ushort month;
    public ushort weekday;
    public ushort day;
    public ushort hour;
    public ushort minute;
    public ushort second;
    public ushort millisecond;
}

public class LibWrap
{
    [DllImport("Kernel32.dll")]
    public static extern void GetLocalTime([In, Out] SystemTime st);
}

public class App
{
    public static void Main()
    {
        SystemTime st = new SystemTime();
        LibWrap.GetLocalTime(st);
        Console.Write("{0}:{1}:{2}.{3}", st.hour, st.minute, st.second, st.millisecond);
        Console.ReadKey();
    }
}

насколько это точно?

1 Ответ

3 голосов
/ 21 февраля 2012

Скорее всего, точность таймера.Который по умолчанию составляет 16 мс (в более новых версиях Windows) и может быть уменьшен до 1 мс с помощью timeBeginPeriod(1) (потенциально увеличивая энергопотребление компьютера).

Все функции «абсолютного времени» в Windows, которые я знаю, работаютс точностью таймера.Поэтому я ожидаю, что он не будет лучше или хуже, чем DateTime.Now.

Функции относительного времени (StopWatch, QueryPerformanceCounter) имеют более высокую точность, но не дают значимого абсолютного времени.Они также могут страдать от проблем синхронизации между несколькими ядрами ЦП.

Но почему бы вам не проверить это: напишите небольшую программу, которая считывает время и печатает его всякий раз, когда оно увеличивается.Сделайте то же самое для DateTime.Now.И сравните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...