在C ++中以微秒的分辨率测量时间?

我正在寻找一种在C ++ / Windows中测量微秒的方法。

我读了关于“时钟”function,但它只返回毫秒…
有没有办法做到这一点?

在Windows上使用QueryPerformanceCounter和QueryPerformanceFrequency获得最好的谷物时间。

MSDN 这里的代码与这些API的时间文章(示例代码是在VB – 抱歉)。

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

altough

使用亚秒分辨率时钟获取UTC时间。 在Unix系统上,这是使用GetTimeOfDay实现的。 在大多数的Win32平台上,它使用ftime来实现。 Win32系统通常不会通过这个API实现微秒的分辨率。 如果更高的分辨率对您的应用程序至关重要,请测试您的平台以查看实现的分辨率

更新的实现可以高精度地在窗口上提供微秒的分辨率时间戳。 系统文件时间和性能计数器的联合使用允许这样的精度看到这个线程或者这个

最近的一个实现可以在Windows时间戳项目中找到

我猜QuerPerformance *答案已经没有问题了:问题在于Windows特定的解决方案,就是这样。 对于一个跨平台的C ++解决方案,我猜boost :: chrono是最有意义的。 Windows实现使用QuerPerformance *方法,并且您立即拥有Linux和Mac解决方案。

Windows中有两种高精度(100 ns分辨率)时钟:

  • GetSystemTimePreciseAsFileTime :100ns分辨率,与UTC同步
  • QueryPerformanceCounter :100ns分辨率, 同步到UTC

QueryPerformanceCounter独立于任何外部时间参考,并且不同步。 这对测量绝对时间间隔非常有用。

GetSystemTimePreciseAsFileTime已同步。 如果您的PC处于加速或减速过程中,您的时钟将逐渐与时间服务器同步,则GetSystemTimePreciseAsFileTime将比绝对时间片适当地更慢或更快。

指导意见是:

  • 如果您需要UTC同步时间戳,则可用于多个系统,例如:使用GetSystemTimePreciseAsFileTime
  • 如果你只需要绝对时间片:使用QueryPerformanceCounter

奖金阅读

  • MSDN:获取高分辨率时间戳
  • MSDN:QueryPerformanceCounter函数
  • MSDN:GetSystemTimePreciseAsFileTime函数
  • MSDN:GetSystemTimeAdjustment函数 (您可以看到Windows是否正在更快或更慢地运行您的时钟以赶上当前真正的UTC时间)

Windows中的所有内核级跟踪基础结构都使用QueryPerformanceCounter来测量绝对时间片。

GetSystemTimeAsFileTime对于类似于日志记录的事情会很有用。