高精度计时器 -- C++/Windows版
在VC++程序里面做计时器可以用CTime,但是这个精度不高,尤其是在时间间隔很短的情况下可能根本没法用。
对于软件测试,可能需要知道精度很高的时间间隔,这个时候最适合用的就是:QueryPerformanceCounter(简称QPC),这是Windows系统提供的API,可信度非常高,QPC可以精确到1微秒(us),所以即使用在很短的时间间隔上也是有价值的。
下面是用C++封装的一段QPC的代码和一个很小的测试用例,当然不用C++封装直接调用QPC也是可以的。
接口规约:
1. 开始(start)
2. 结束(end)
3. 记录用时(getElapsedTime)
所以,封装以后的程序非常简单:开始计时、停止计时、看一下用了多少时间、重新计时,就是这么简单。
//StopWatch.h #include <Windows.h> class CStopWatch { public:CStopWatch();void start();void stop();double getElapsedTime(); //in s private:LARGE_INTEGER m_start;LARGE_INTEGER m_stop;LARGE_INTEGER m_frequency; };//StopWatch.cpp CStopWatch::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 <stdio.h> void swap(int & a, int & b) {int t = a;a = b;b = t; } //compile : cl StopWatch.cc int 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. [MSDN] Acquiring high-resolution time stamps
2. [MSDN] QueryPerformanceCounter function
转载于:https://www.cnblogs.com/tszdev/p/6888639.html
高精度计时器 -- C++/Windows版相关推荐
- Windows/Linux高精度计时器(C++)
/* * Linux/Windows 系统高精度计时器 */#ifndef __LX_TIMER_H__ #define __LX_TIMER_H__ #ifdef WIN32 #include #e ...
- 添加高精度计时器测量处理能力
文章目录 1 添加高精度计时器测量处理能力 1 添加高精度计时器测量处理能力 这里我们为服务端添加高精度计时器来测量处理能力,这里使用C++11提供的库来实现. CELLTimeStamp.hpp: ...
- 视频教程-Windows版YOLOv4目标检测实战:人脸口罩佩戴检测-计算机视觉
Windows版YOLOv4目标检测实战:人脸口罩佩戴检测 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多 ...
- PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软
点击上方"视学算法",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:机器之心 刚刚,Facebook 通过 PyTorch 官方博客宣布:PyTorc ...
- windows版influxDB安装与配置
一.下载链接https://portal.influxdata.com/downloads,选windows版 二.解压到安装盘,目录如下 三.修改conf文件,代码如下,直接复制粘贴(1.4.2版本 ...
- 生产者消费者问题——C++ windows版 多生产者多消费者的队列实现
最进要写一个多线程加载资源的资源管理器(ResourceManager)和多线程音频解码器(MultiThread Decoder).因为距最近一次用到多线程放下好久了,所以今天把生产者消费者问题练一 ...
- Xamarin.Forms教程下载安装Windows版的Xamarin开发工具
Xamarin.Forms教程下载安装Windows版的Xamarin开发工具 下载安装Windows版的Xamarin开发工具 本节将讲解如何下载并安装Windows版的Xamarin开发工具. 下 ...
- Oracle instant client安装与设置 - Windows版,可用WIN7
1.下载 到http://www.oracle.com/technology/software/tech/oci/instantclient/index.html下载符合自己版本的安装程序. 2.解压 ...
- Android Studio2.0 教程从入门到精通Windows版
系列教程 Android Studio2.0 教程从入门到精通Windows版 - 安装篇 Android Studio2.0 教程从入门到精通Windows版 - 入门篇 Android Studi ...
最新文章
- 5G通信3大场景 来源:elecfans
- CentOS7安装OpenFire
- 圆与平面的接触面积_视频:5.3RJ六年级上册圆的面积例题+习题讲解
- @JsonFormat与@DateTimeFormat注解的使用
- 不会SQL?没关系,以后动动嘴就能查询数据库了 | 附论文
- Angular通过CORS实现跨域方案
- Git基础教程(三)
- linux学习笔记:linux中磁盘管理常用的几个命令
- 目前流行的源程序版本管理软件和项目管理的软件优缺点
- wget 持续下载确保完成
- Nero 7序列号的验证方法
- php 年会抽奖,PHP+jQuery年会在线拍照抽奖
- 转载:《七周成为数据分析师》
- java语言,MP3音频文件进行合并功能
- 今日头条前端面试总结
- 西南交大计算机第3次作业答案,西南交大大学英语I第3次作业题答案
- 自媒体数据运营saas_向媒体宣传您的SaaS
- 根据Magic Number(幻数)判断文件类型
- Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, E
- Flink框架吐血总结,学习与面试收藏这一篇就够了,大数据必备知识体系