【发布时间】:2015-08-07 21:46:25
【问题描述】:
我正在寻找一种在 C++/Windows 中测量微秒的方法。
我读到了“时钟”功能,但它只返回毫秒...
有没有办法做到这一点?
【问题讨论】:
我正在寻找一种在 C++/Windows 中测量微秒的方法。
我读到了“时钟”功能,但它只返回毫秒...
有没有办法做到这一点?
【问题讨论】:
在 Windows 上使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 获得最精细的时间。
关于使用这些 API 进行代码计时的 MSDN 文章 here(示例代码在 VB 中 - 抱歉)。
【讨论】:
http://www.boost.org/doc/libs/1_45_0/doc/html/date_time/posix_time.html
虽然
使用亚秒级分辨率时钟获取 UTC 时间。在 Unix 系统上,这是使用 GetTimeOfDay 实现的。在大多数 Win32 平台上,它是使用 ftime 实现的。 Win32 系统通常无法通过此 API 实现微秒级分辨率。如果更高的分辨率对您的应用程序至关重要,请测试您的平台以查看达到的分辨率。
【讨论】:
最近的实现可以在 Windows 上提供微秒分辨率的时间戳 具有高精度。系统文件时间和性能计数器的联合使用允许 这样的准确性see this thread 或this one
最近的一个实现可以在Windows Timestamp Project找到
【讨论】:
我想已经给出的 QuerPerformance* 答案没有任何问题:问题是针对特定于 Windows 的解决方案,就是这样。对于跨平台的 C++ 解决方案,我猜 boost::chrono 最有意义。 Windows 实施使用 QuerPerformance* 方法,您立即拥有 Linux 和 Mac 解决方案。
【讨论】:
Windows 中有两个高精度(100 ns 分辨率)时钟:
GetSystemTimePreciseAsFileTime:100ns 分辨率,与 UTC 同步QueryPerformanceCounter:100ns 分辨率,不与 UTC 同步QueryPerformanceCounter 独立于任何外部时间参考,也不与任何外部时间参考同步。它对于测量绝对时间跨度很有用。
GetSystemTimePreciseAsFileTime 已同步。如果您的 PC 正在加快或减慢您的时钟以使其逐渐与时间服务器同步,GetSystemTimePreciseAsFileTime 将适当地比绝对时间跨度更慢或更快。
指导是:
Windows 中的所有内核级跟踪基础架构都使用 QueryPerformanceCounter 来测量绝对时间跨度。
GetSystemTimeAsFileTime 对于日志记录之类的东西很有用。
【讨论】:
(因为还没有人提到纯 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 以来的秒数
【讨论】: