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

时间:2010-12-14 20:51:51

标签: c++ windows timing

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

我读过“时钟”功能,但它只返回毫秒...
有办法吗?

6 个答案:

答案 0 :(得分:6)

使用QueryPerformanceCounterQueryPerformanceFrequency获取最佳的谷物播放时间。

MSDN关于使用这些API here进行代码计时的文章(示例代码在VB中 - 抱歉)。

答案 1 :(得分:1)

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

altough

  

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

答案 2 :(得分:1)

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

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

GetSystemTimePreciseAsFileTime 已同步。如果你的PC正在加速或减速,你的时钟逐渐与时间服务器同步,GetSystemTimePreciseAsFileTime将比绝对时间盘更慢或更快。

指导意见是:

  • 如果您需要UTC同步时间戳,以便在多个系统中使用,例如:use GetSystemTimePreciseAsFileTime
  • 如果您只需要绝对时间间隔:使用QueryPerformanceCounter

奖金阅读

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

GetSystemTimeAsFileTime对于记录等内容非常有用。

答案 3 :(得分:0)

更近期的实现可以在窗口上提供微秒分辨率时间戳 精度高。联合使用系统文件时间和性能计数器允许 这样的准确度see this threadthis one

最近的一项实施可以在Windows Timestamp Project

找到

答案 4 :(得分:0)

我想已经给出的QuerPerformance *答案没有任何问题:问题出在Windows特定的解决方案上,就是这样。对于跨平台的C ++解决方案,我认为boost::chrono最有意义。 Windows实现使用QuerPerformance *方法,您也可以立即使用Linux和Mac解决方案。

答案 5 :(得分:0)

(因为还没有人提到过纯c ++方法),

从c ++ 11开始:

#include <chrono>
std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch())

获取自1970-01-01以来的微秒数,并且php的microtime(true) API的端口为

#include <chrono>
double microtime(){
    return (double(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count()) / double(1000000));
}

以毫秒为单位获取自1970-01-01以来的秒数