Здравствуйте!
Для каких целей вам необходима информация с точностью до миллисекунд о системном времени?
Если вам это для математических вычислений, расчёта потраченного времени (разницы в интервалах) и т.п., то здесь лучше всего подходит таймер (кол-во тиков процессора), а не текущее время.
В системе явно задаются ограничения точности (это называется разрешением). Оно отдельно существует для функции таймера, и отдельно налагается на функции получения текущего времени, вроде GetSystemTime / GetLocalTime.
Кроме того это зависит от версии ОС (для таймера на XP, например это число около 10-15 мс., на Win7 - 1 мс.) и аппаратной конфигурации.
1. Таймер.
Используйте функции:
-
QueryPerformanceCounter
-
QueryPerformanceFrequency
Пример на VB6.
А для снятия ограничения на разрешение можно воспользоваться недокументированной функцией NtSetTimerResolution (
пример на C++).
Кроме того, необходимо учитывать, что у процессора могут быть собственные ограничения на максимально возможную разрешающую способность.
Детальнее об этих функциях можно почитать в статье Марка Руссиновича:
Sysinternals Freeware - Inside Windows NT High Resolution Timers
Увидеть текущее разрешение таймера можно, выполнив в консоли программу ClockRes:
ClockRes - Windows Sysinternals
Стоит учитывать, что эти функции имеют рассинхронизацию при работе на разных потоках и ядрах процессора.
2. Получение текущего времени
Получить его в высоком разрешении можно только в Win 8 и выше.
Для этого воспользуйтесь функцией
GetSystemTimePreciseAsFileTime