Какой метод синхронизации я должен использовать для измерения изменений во времени - PullRequest
0 голосов
/ 18 мая 2018

После изучения VBA-бенчмаркинга ( см. Также ) Я не удовлетворен тем, что эти ответы достаточно подробно описаны.Из аналогичного вопроса о сроках в Go я вижу разницу между измерением абсолютного времени и изменениями во времени.Для абсолютного времени следует использовать «настенные часы», которые можно синхронизировать между машинами, используя сетевой протокол времени, например

. Между тем, для измерения различий во времени следует использовать «монатонные часы», поскольку они неподвержены високосным секундам или (в соответствии с этим связанным ответом го) изменениям частоты часов.

Я правильно понял?Есть что-нибудь еще, чтобы рассмотреть?Если предположить, что эти определения верны, к какой категории относятся все эти часы или, другими словами, , какие из этих часов дадут мне наиболее точное измерение изменений во времени:

  • VBA Time
  • VBA Timer
  • WinApi GetTickCount
  • WinApi GetSystemTimePreciseAsFileTime
  • WinApi QueryPerformanceFrequency + QueryPerformanceCounter

Или это что-то еще?

Возможно, я пропускаю другие подходы.Я говорю это потому, что некоторые языки, такие как Java, получают время в наносекундах , а не в микросекундах, как это возможно?Конечно, Windows Api использует самый точный аппаратный таймер, который дает микросекундное разрешение.Что делает Java и могу ли я это скопировать?

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

1 Ответ

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

QueryPerformanceFrequency и QueryPerformanceCounter собираются дать вам таймер с самым высоким разрешением.Они в основном заключают в себе инструкцию rtdsc, которая считает истекшие циклы ЦП.

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