博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高精度计时器 -- C++/Windows版
阅读量:5133 次
发布时间:2019-06-13

本文共 1474 字,大约阅读时间需要 4 分钟。

在VC++程序里面做计时器可以用CTime,但是这个精度不高,尤其是在时间间隔很短的情况下可能根本没法用。

对于软件测试,可能需要知道精度很高的时间间隔,这个时候最适合用的就是:QueryPerformanceCounter(简称QPC),这是Windows系统提供的API,可信度非常高,QPC可以精确到1微秒(us),所以即使用在很短的时间间隔上也是有价值的。

下面是用C++封装的一段QPC的代码和一个很小的测试用例,当然不用C++封装直接调用QPC也是可以的。

接口规约:

  1. 开始(start)

  2. 结束(end)

  3. 记录用时(getElapsedTime)

所以,封装以后的程序非常简单:开始计时、停止计时、看一下用了多少时间、重新计时,就是这么简单。

//StopWatch.h#include 
class CStopWatch{public: CStopWatch(); void start(); void stop(); double getElapsedTime(); //in sprivate: LARGE_INTEGER m_start; LARGE_INTEGER m_stop; LARGE_INTEGER m_frequency;};//StopWatch.cppCStopWatch::CStopWatch(){ m_start.QuadPart = 0; m_stop.QuadPart = 0; QueryPerformanceFrequency(&m_frequency);}void CStopWatch::start(){ QueryPerformanceCounter(&m_start);}void CStopWatch::stop(){ QueryPerformanceCounter(&m_stop);}double CStopWatch::getElapsedTime(){ LARGE_INTEGER time; time.QuadPart = m_stop.QuadPart - m_start.QuadPart; return (double)time.QuadPart / (double)m_frequency.QuadPart;}//test#include
void swap(int & a, int & b){ int t = a; a = b; b = t;}//compile : cl StopWatch.ccint main(){ CStopWatch timer; timer.start(); //... int a=1, b=2; for (unsigned int i = 0; i < 100000000; ++i) { swap(a, b); swap(a, b); } timer.stop(); double d = timer.getElapsedTime(); printf("%fs\n", d); //1.166879s}

 

参考资料:

1.

2.

转载于:https://www.cnblogs.com/tszdev/p/6888639.html

你可能感兴趣的文章
Threadump analyzed Learning plan
查看>>
Xinlinx 7系列FPGA概览
查看>>
【Linux 命令】- tail命令
查看>>
2018软工实践第二次作业
查看>>
报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity:
查看>>
MySQL教程(十二)—— 数据的导入与导出
查看>>
《人月神话》读书笔记2--空间技能
查看>>
ZooKeeper系列(3):znode说明和znode状态
查看>>
JavaScript面向对象和原型函数
查看>>
DPDK 网卡绑定和解绑
查看>>
configparser模块简介
查看>>
phpMailer在CentOS 6.5下无法发送邮件的解决办法
查看>>
request之额外路径
查看>>
Android WebView无法播放视频或直播,关闭界面后任在播放的问题;
查看>>
POJ1201 Intervals 【差分约束】
查看>>
一个XP SP3调用0地址蓝屏BUG
查看>>
ios开发--编码格式
查看>>
dubbo/dubbox部署资料收集
查看>>
Android开发学习笔记---搭建Android开发环境
查看>>
PHP之POST方法
查看>>