Я бы рекомендовал использовать API GetSystemTimeAsFileTime , если вы специально ориентированы на Windows.Как правило, он быстрее, чем GetSystemTime и имеет ту же точность (что составляет около 10-15 миллисекунд - не смотрите на разрешение);когда я проводил тестирование несколько лет назад под Windows XP, он был где-то в диапазоне 50-100 раз быстрее.
Единственным недостатком является то, что вам, возможно, придется преобразовывать возвращаемые структуры FILETIME во время часов, используя, например, FileTimeToSystemTime , если вам нужно получить доступ к возвращенному времени в более удобном для человека формате.С другой стороны, если вам не нужны эти преобразованные времена в режиме реального времени, вы всегда можете делать это в автономном режиме или «ленивым» способом (например, только конвертировать метки времени, которые вам нужно отображать / обрабатывать, итолько когда они вам действительно нужны).
QueryPerformanceCounter может быть хорошим выбором, как уже упоминали другие, но накладные расходы могут быть довольно большими в зависимости от базовой аппаратной поддержки.В моем тесте, о котором я упоминал выше, вызовы QueryPerformanceCounter были в 25-200 раз медленнее, чем вызовы GetSystemTimeAsFileTime.Кроме того, существуют некоторые проблемы с надежностью, как, например, сообщалось здесь .
Итак, в заключение: если вы можете справиться с точностью до 10-15 миллисекунд, я бы порекомендовал вам использовать GetSystemTimeAsFileTime.Если вам нужно что-то лучшее, чем это, я бы пошел на QueryPerformanceCounter.
Небольшой отказ от ответственности: я не проводил никаких тестов в более поздних версиях Windows, чем XP SP3.Я бы порекомендовал вам самостоятельно провести сравнительный анализ.