在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版相关推荐

  1. Windows/Linux高精度计时器(C++)

    /* * Linux/Windows 系统高精度计时器 */#ifndef __LX_TIMER_H__ #define __LX_TIMER_H__ #ifdef WIN32 #include #e ...

  2. 添加高精度计时器测量处理能力

    文章目录 1 添加高精度计时器测量处理能力 1 添加高精度计时器测量处理能力 这里我们为服务端添加高精度计时器来测量处理能力,这里使用C++11提供的库来实现. CELLTimeStamp.hpp: ...

  3. 视频教程-Windows版YOLOv4目标检测实战:人脸口罩佩戴检测-计算机视觉

    Windows版YOLOv4目标检测实战:人脸口罩佩戴检测 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多 ...

  4. PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软

    点击上方"视学算法",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:机器之心 刚刚,Facebook 通过 PyTorch 官方博客宣布:PyTorc ...

  5. windows版influxDB安装与配置

    一.下载链接https://portal.influxdata.com/downloads,选windows版 二.解压到安装盘,目录如下 三.修改conf文件,代码如下,直接复制粘贴(1.4.2版本 ...

  6. 生产者消费者问题——C++ windows版 多生产者多消费者的队列实现

    最进要写一个多线程加载资源的资源管理器(ResourceManager)和多线程音频解码器(MultiThread Decoder).因为距最近一次用到多线程放下好久了,所以今天把生产者消费者问题练一 ...

  7. Xamarin.Forms教程下载安装Windows版的Xamarin开发工具

    Xamarin.Forms教程下载安装Windows版的Xamarin开发工具 下载安装Windows版的Xamarin开发工具 本节将讲解如何下载并安装Windows版的Xamarin开发工具. 下 ...

  8. Oracle instant client安装与设置 - Windows版,可用WIN7

    1.下载 到http://www.oracle.com/technology/software/tech/oci/instantclient/index.html下载符合自己版本的安装程序. 2.解压 ...

  9. Android Studio2.0 教程从入门到精通Windows版

    系列教程 Android Studio2.0 教程从入门到精通Windows版 - 安装篇 Android Studio2.0 教程从入门到精通Windows版 - 入门篇 Android Studi ...

最新文章

  1. 5G通信3大场景 来源:elecfans
  2. CentOS7安装OpenFire
  3. 圆与平面的接触面积_视频:5.3RJ六年级上册圆的面积例题+习题讲解
  4. @JsonFormat与@DateTimeFormat注解的使用
  5. 不会SQL?没关系,以后动动嘴就能查询数据库了 | 附论文
  6. Angular通过CORS实现跨域方案
  7. Git基础教程(三)
  8. linux学习笔记:linux中磁盘管理常用的几个命令
  9. 目前流行的源程序版本管理软件和项目管理的软件优缺点
  10. wget 持续下载确保完成
  11. Nero 7序列号的验证方法
  12. php 年会抽奖,PHP+jQuery年会在线拍照抽奖
  13. 转载:《七周成为数据分析师》
  14. java语言,MP3音频文件进行合并功能
  15. 今日头条前端面试总结
  16. 西南交大计算机第3次作业答案,西南交大大学英语I第3次作业题答案
  17. 自媒体数据运营saas_向媒体宣传您的SaaS
  18. 根据Magic Number(幻数)判断文件类型
  19. Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, E
  20. Flink框架吐血总结,学习与面试收藏这一篇就够了,大数据必备知识体系

热门文章

  1. SCCM2012系列之六,SCCM2012部署前的WDS准备
  2. 360,选择顶你还是拍你啊?
  3. 转载 2020-02-18 在KVM主机和虚拟机之间共享目录
  4. 2018-10-15
  5. 欢迎界面java_Linux命令行欢迎界面美化
  6. python给定dna等分成两个序列_分析DNA序列中的串联重复序列
  7. Go 1.9中值得关注的几个变化
  8. 二、kafka基本操作和管理
  9. php模糊搜索 变量,自定义搜索seo变量{param}字符串
  10. linux部署多个jar 会宕机_我常用的自动化部署技巧,贼好用,推荐给大家!