Какой самый быстрый способ узнать время в окнах с точностью до 1 мс? - PullRequest
2 голосов
/ 11 марта 2010

интересует абсолютное время, а не способ измерения длительности.

Win32 API

C ++

Ответы [ 7 ]

5 голосов
/ 11 марта 2010

Вам понадобится оборудование для такой абсолютной точности, как Часы GPS-радио . Вам также нужно будет написать программное обеспечение на уровне драйвера устройства, программы пользовательского режима не могут реагировать достаточно быстро, чтобы рассчитывать время до миллисекунды. В общем, Windows не является подходящей операционной системой для этого.

5 голосов
/ 11 марта 2010

Для этого вам понадобится специальное оборудование. Несмотря на то, что API-интерфейсы Windows сообщают миллисекунды, это не совсем точно в соответствии с этим обсуждением:

Большинство компьютеров Intel Pentium Base (я не уверен в других) есть чип таймера на материнской плате, которая имеет Счетчик 1.19318166667 МГц.

Счетчик отсчитывает от N (по по умолчанию N = 65535) до 1 со скоростью 1.19318166667MHz. Прерывание системного таймера генерируется, когда счетчик переворачивается с 1 на N (ноль никогда не происходит). Обратите внимание, системное время обновляется этим прерыванием.

Если N = 65535, то системный таймер прерывание генерируется (+1,19318166667 / 65535 * 1000000) = 18,2 раз в секунду. Это приравнивается к каждые 54,9 миллисекунды.

Эта зернистость присуща большинству ПК используются сегодня.

2 голосов
/ 12 марта 2010

Что вам нужно сделать, это соотнести время суток со значением счетчика смещений, и вместе с частотой счетчика, который вы впоследствии сможете в своем приложении, быстро рассчитать абсолютное время.

Для одноядерного хоста, не использующего управление питанием и со стабильным TSC, использование RDTSC будет самым быстрым, но вам придется самостоятельно определять частоту, как правило, запустив фиксированный временной цикл скажем 5 секунд и измерить разницу.

Устройство HPET было создано для преодоления недостатков TSC с несколькими ядрами, гиперпоточностью и управлением питанием, вызывающими переменные тактовые частоты. HPET доступны только на современном оборудовании, они имеют собственный счетчик и программируемую частоту и должны считываться аналогично TSC. Стоимость дороже, хотя около 500 нс.

Windows предоставляет функции QueryPerformanceCounter и QueryPerformanceFrequency , чтобы обработать все это для вас, она автоматически выберет устройство APIC или HPET и использует TSC для интерполяции значений.

0 голосов
/ 12 марта 2010

timeGetTime был разработан для использования при воспроизведении мультимедиа, поэтому он более точен, чем функция GetTickCount(). Однако он не откалиброван по времени часов.

Чтобы получить время с точностью до миллисекунды. Вы должны получить время на часах, а также timeGetTime или QueryPerformanceCounter как можно ближе к одинаковому времени. Затем вы можете совершать последовательные вызовы timeGetTime и т. Д., Чтобы получить количество миллисекунд, прошедших от известного времени.

Имейте в виду, что timeGetTime происходит каждые 47 дней ...

0 голосов
/ 11 марта 2010

Если вам нужна точность, вы должны проверить NIST, Национальный институт стандартов и технологий .У них есть программное обеспечение, которое позволяет вам получать время со своих серверов.Обладает высокой точностью и разрешением.Это также стандарт времени, используемый приемниками GPS.

Однако вы не сможете получать время с высокой частотой из-за сетевого трафика и нарушений.

0 голосов
/ 11 марта 2010
0 голосов
/ 11 марта 2010

В счетчиках производительности есть что-то с разрешением 1RC IIMS.

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