C++ chrono库高精度计时_C++ steady_clock与duration用法

推荐使用std::chrono库中的steady_clock进行高精度计时,因其不受系统时间调整影响。1. 通过steady_clock::now()获取时间点start和end;2. 计算时间差得duration对象,再用duration_cast转换为microseconds、milliseconds等单位;3. 示例中测量函数执行耗时,输出微秒级精度结果。核心是利用steady_clock记录稳定时间点,结合duration处理时间间隔,实现精确计时。

在C++中进行高精度计时,推荐使用std::chrono库。其中std::chrono::steady_clock是最佳选择,因为它不受系统时间调整的影响,适合测量时间间隔。

1. 使用 steady_clock 获取时间点

steady_clock提供稳定递增的时间源,不会因网络时间同步或手动修改系统时间而跳跃。

获取当前时间点:

auto start = std::chrono::steady_clock::now();
// ... 执行代码
auto end = std::chrono::steady_clock::now();

2. 使用 duration 计算时间差

两个时间点之差是一个duration对象,可转换为具体单位。

计算耗时并输出:

auto duration = end - start;
auto microseconds = std::chrono::duration_cast(duration);
auto milliseconds = std::chrono::duration_cast(duration);
auto seconds = std::chrono::duration_cast(duration);

std::cout << "耗时: " << microseconds.count() << " 微秒\n"; std::cout << "耗时: " << milliseconds.count() << " 毫秒\n";

常用 duration 类型:

  • nanoseconds:纳秒
  • microseconds:微秒
  • milliseconds:毫秒
  • seconds:秒
  • minutes:分钟
  • hours:小时

3. 高精度计时示例

完整示例:测量函数执行时间

#include 
#include 
#include 

void test_function() { std::this_thread::sleep_for(std::chrono::milliseconds(10)); }

int main() { auto start = std::chrono::steady_clock::now();

test_function();

auto end = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_castzuojiankuohaophpcnstd::chrono::microsecondsyoujiankuohaophpcn(end - start);

std::cout zuojiankuohaophpcnzuojiankuohaophpcn "函数执行耗时: " zuojiankuohaophpcnzuojiankuohaophpcn duration.count() zuojiankuohaophpcnzuojiankuohaophpcn " 微秒\n";
return 0;

}

基本上就这些。用steady_clock::now()记录时间点,相减得duration,再用duration_cast转成需要的单位。不复杂但容易忽略细节。