Измерение времени с разрешением микросекунд в C ++? - PullRequest
4 голосов
/ 14 декабря 2010

Я ищу способ измерения микросек в C ++ / Windows.

Я читал о функции "часы", но она возвращает только миллисекунды ...
Есть ли способ сделать это?

Ответы [ 5 ]

6 голосов
/ 14 декабря 2010

Используйте QueryPerformanceCounter и QueryPerformanceFrequency для наилучшей синхронизации зерна в Windows.

Статья MSDN о синхронизации кода с этими API здесь (пример коданаходится в VB - извините).

1 голос
/ 25 февраля 2017

В Windows доступны два высокоточных (с разрешением 100 нс) такта:

QueryPerformanceCounter не зависит и не синхронизируется с,любая внешняя временная привязка.Это полезно для измерения абсолютных временных интервалов.

GetSystemTimePreciseAsFileTime синхронизируется.Если ваш компьютер находится в процессе ускорения или замедления, ваши часы, чтобы постепенно синхронизировать его с сервером времени, GetSystemTimePreciseAsFileTime будут соответственно медленнее или быстрее, чем абсолютные временные промежутки.

Руководство:

  • , если вам нужны синхронизированные метки времени UTC, например, для использования в нескольких системах: используйте GetSystemTimePreciseAsFileTime
  • , если вам нужны только абсолютные временные области: используйте QueryPerformanceCounter

BonusСчитывание

Вся инфраструктура трассировки на уровне ядра в Windows использует QueryPerformanceCoUnter для измерения абсолютных временных интервалов.

GetSystemTimeAsFileTime будет полезен для чего-то вроде ведения журнала.

1 голос
/ 15 декабря 2010

http://www.boost.org/doc/libs/1_45_0/doc/html/date_time/posix_time.html

хотя

Получите время UTC, используя часы с разрешением менее секундыВ системах Unix это реализовано с использованием GetTimeOfDay.На большинстве платформ Win32 это реализовано с использованием ftime.Системы Win32 часто не достигают микросекундного разрешения через этот API.Если более высокое разрешение критично для вашего приложения, протестируйте свою платформу, чтобы увидеть достигнутое разрешение.

0 голосов
/ 10 февраля 2014

Полагаю, в ответе QuerPerformance * нет ничего плохого: вопрос был о решении для Windows, и вот оно. Я полагаю, что для кроссплатформенного решения C ++ boost :: chrono имеет смысл. В реализации Windows используются методы QuerPerformance *, и вы сразу же получите решение для Linux и Mac.

0 голосов
/ 12 июля 2012

Более поздние реализации могут предоставлять метки времени с микросекундным разрешением для окон с высокой точностью.Совместное использование системного времени файлов и счетчика производительности позволяет получить такую ​​точность см. Этот поток или также этот

Одна из последних реализаций можно найти на Проект отметки времени Windows

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