c/c++计时

every blog every motto: Big mouthfuls ofter choke

前言

关于c/c++ 计时小结。
1 秒(s) = 1000毫秒(ms)=1000000微妙(us)

正文

1. 毫秒(ms)级计时

#include<time.h> // 所需要的头文件
double duration // 程序运行时间

time_t start = clock(); // 计时开始
... // 所需要记录的时间的程序
time_t end = clock(); // 结束计时
duration = end-start;
print("程序运行了:%f s",duration);

2. 微秒(us)级计时

#include<windows.h>
#include<stdio.h>

// 初始化计时
int ms = 1000; // 毫秒
int us = 1000000; // 微秒
LARGE_INTEGR nFreq; // 时钟频率
LARGE_INTEGR t1,t2;
double duration; // 程序运行时间
QueryPerformanceFrequency(&nFreq); 


QueryPerformanceCounter(&t1); // 开始计时

.... // 所需要记录时间的代码

QueryPerformanceCounter(&t2); // 结束计时

// 程序运行时间
duration = (t2.QuadPart-t1.QuadPart)/(double)nFreq.QuadPart;

//输出显示
cout <<"花费了:"<<duration*us<<"us"<<endl;

注:

  1. duration1000 输出的是毫秒;duration1000000输出的微妙。
  2. 初始化计时程序要放在主程序中,不然容易报错(笔者在花费了很长时间)

3.另一种微秒级实现

#include<chrono>
using namespace std;
using namespace chrono;

// 开始计时
auto start = system_clock::now();
... // 所需记录时间的代码
// 结束计时
auto end = system_clock::now();

// 程序运行的时间
auto duration = duration_cast<microseconds>(end-start) 

// 输出显示
cout <<"花费了:"
<<double(duration.count())*micoseconds::period::num/micosconds::period::den<<"秒"<<endl;

注:

  1. 文献[3]指出上述第二种方法与CPU的频率稳定性有关,在计时时间较常的情况下,上述计时方法会出现计时不稳定的结果。(笔者未加验证)
  2. 第三种方法,刚开始调试,由于精度不满足需求,直接跳过。整理文章时发现其也可以输出微秒级,如有需要可参考文献[3]。
  3. 更多的计时方法,请查阅参考文献。

参考文献:

[1] http://www.cppblog.com/deane/articles/113151.html
[2] https://blog.csdn.net/zhouxianen1987/article/details/53883684
[3] https://blog.csdn.net/qq_26341675/article/details/70194851
[4] https://blog.csdn.net/homewm/article/details/80302534
[5] https://blog.csdn.net/lizehao1973/article/details/85456872

发布了39 篇原创文章 · 获赞 32 · 访问量 5797

猜你喜欢

转载自blog.csdn.net/weixin_39190382/article/details/103898303