Точная дельта времени для умеренных интервалов времени: GetTickCount64 vs QueryPerformanceCounter - PullRequest
0 голосов
/ 15 мая 2018

Есть много вопросов ( здесь , здесь , здесь ) о механизмах получения монотонного времени в Windows и их различных ошибках и подводных камнях.Меня особенно интересует точность (а не точность) основных параметров.

Я хочу измерить прошедшее время на одной машине, когда время составляет от нескольких минут до часа.Что я знаю до сих пор:

  • QueryPerformanceCounter отлично подходит для коротких временных интервалов, но QPF может иметь ошибку порядка 500 стр / мин, что приводит к ошибке 2 секунды в течение часа,
    • Еще более тревожно то, что даже на довольно недавних процессорах люди видят неправильное поведение QPC .
    • Microsoft рекомендует QPC прежде всего для кратковременных измерений длительности.Но краткосрочные не определены ни в каких абсолютных числах.
  • GetTickCount64 часто цитируется как хорошая и надежная, менее точная альтернатива для QPC.
    • Я не нашел хороших подробностей о точности GetTickCount64.Хотя он менее точен, чем QPC, как его точность сравнивается?Какую ошибку я могу ожидать в течение часа?
    • Некоторые программы воспроизводят с ее разрешением, используя timeBeginPeriod , хотя я не думаю, что это влияет на точность?
    • В документах рассказывается о том, как на разрешение GetTickCount64 не влияют корректировки, сделанные функцией GetSystemTimeAdjustment .Надеюсь, это означает, что GetTickCount64 является монотонным и не настраивается никогда?Это необычная формулировка ...
  • GetSystemTimePreciseAsFileTime - это опция для разницы времени на одной машине, если я отключаю автоматическую настройку времени с помощью SetSystemTimeAdjustment .Он поддерживается QPC.Есть ли какая-либо польза от использования этого по сравнению с QPC напрямую?(Может быть, он выполняет трюки санации или связывания потоков, чтобы избежать некоторых проблем, с которыми сталкиваются прямые вызовы QPC?)

1 Ответ

0 голосов
/ 15 мая 2018

Один SO QA, который я нашел связанный с этим сообщением в блоге , которое было особенно полезно читать. Хотя он не дает прямого ответа на мой вопрос, он углубляется в то, как QPC работает в Windows, и как обычное монотонное время в Linux использует одно и то же.

Суть в том, что оба они используют rtdsc, когда доступен инвариантный TSC на современном оборудовании.

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