我正在寻找一种在C ++ / Windows中测量微秒的方法。
我读过“时钟”功能,但它只返回毫秒...
有办法吗?
答案 0 :(得分:6)
使用QueryPerformanceCounter和QueryPerformanceFrequency获取最佳的谷物播放时间。
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分辨率)时钟:
GetSystemTimePreciseAsFileTime
:100ns分辨率,同步到UTC QueryPerformanceCounter
:100ns分辨率,不与UTC同步QueryPerformanceCounter 独立于任何外部时间参考,并且未与其同步。它对于测量绝对时间间隔非常有用。
GetSystemTimePreciseAsFileTime 已同步。如果你的PC正在加速或减速,你的时钟逐渐与时间服务器同步,GetSystemTimePreciseAsFileTime将比绝对时间盘更慢或更快。
指导意见是:
Windows中的所有内核级跟踪基础结构都使用QueryPerformanceCounter来测量绝对时间跨度。
GetSystemTimeAsFileTime对于记录等内容非常有用。
答案 3 :(得分:0)
更近期的实现可以在窗口上提供微秒分辨率时间戳 精度高。联合使用系统文件时间和性能计数器允许 这样的准确度see this thread或this 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以来的秒数