一、代码

(1)返回高精度毫秒计时

long MyGetTickCount()
{static BOOL init = FALSE;static BOOL hires = FALSE;static _int64 freq = 1;if(!init){hires = QueryPerformanceFrequency((LARGE_INTEGER*)&freq);if(!hires)freq = 1000;init = TRUE;}_int64 now;if(hires)QueryPerformanceCounter((LARGE_INTEGER*)&now);elsenow = GetTickCount();return (long)(1000.0f * (double)now/(double)freq);
}

(2)计时消耗(时间差)

long GetTickCountDIFF(long lBegin,long lNow = 0)
{if(0 == lBegin)return 0;if(0 == lNow)lNow = MyGetTickCount();long lDiff = lNow - lBegin;if(lDiff < 0)lDiff = 0xFFFFFFFF - lBegin + lNow + 1;return lDiff;
}

(3)应用

#include "stdafx.h"
#include <Windows.h>int main()
{long lBeginTime = MyGetTickCount();//------------------------//-------your code--------//------------------------long lTime = GetTickCountDIFF(lBeginTime); //计算your code耗时,lTime为最终耗时,单位为毫秒return 0;
}

二、介绍

在多核心或多处理器的计算机上。特别是在支持CPU频率动态调整的计算机上,windows系统下QueryPerformanceFrequency()获取HPET(假设存在)的频率,而QueryPerformanceCounter()获取HPET(假设存在高精度事件定时器)自开启以来时钟周期数,与CPU频率无关。前一个函数不会由于线程执行所在的CPU不同或CPU的频率在不同一时候刻的差异而反馈不同的值。系统开启初始化以后便不会改变。后一个函数的源也是统一的。这样便能够精确计算目标程序,特别是多线程程序的性能。

 注:可是这和程序详细的执行环境有关,程序执行的流畅顺利就所用的时间就短,程序执行的环境不好,持续时间久非常长。

         故尽管能够实现高精度定时计数,可是程序的执行时间还是和执行环境有关,无法做到精确測量。

QueryPerformanceFrequency() - 基本介绍

类型:Win32API

原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

作用:返回硬件支持的高精度计数器的频率。

返回值:非零,硬件支持高精度计数器;零。硬件不支持。读取失败。

函数的原形是:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);

数据类型LARGE_INTEGER既能够是一个作为8字节长的整数,也能够是作为两个4字节长的整数的联合结构,其详细使用方法依据编译器是否支持64位而定。该类型的定义例如以下:

在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。

接着在须要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率。就能够计算出事件经历的精确时间。

C++ Windows——计算耗时(获取高精度毫秒计时)相关推荐

  1. Zephyr下计算耗时

    Zephyr下有两个时间特点: 32位硬件时钟是一个高精度计数器,可以跟踪若干个周期时间,但这个周期不能指定单位.一个周期的持续时间取决于内核使用的电路板硬件,通常以纳秒为单位进行测量. 64位系统时 ...

  2. 计算耗时为微秒的方法(包含:时/分/秒/毫秒/微秒/纳秒)

    计算耗时为微秒的方法1 #include<stdio.h> #include <windows.h> int main() {int a[10002];int i = 0;do ...

  3. java StopWatch计算耗时毫秒数

    java 计算耗时毫秒数的方法: StopWatch stopWatch = new StopWatch("下载文件耗时");stopWatch.start();....//各种下 ...

  4. C/C++获取高精度时间

    开发XEIM即时通讯软件 时,需要用C/C++获取高精度时间,解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间.可惜的是,C++中提供的方法一般只能精确到毫秒级. ...

  5. 使用StopWatch计算耗时

    一.传统计算耗时方式 一般采用 System.currentTimeMillis() 来获取时间,然后打印当前时间与任务开始执行时间的差值. 记录开始时间点 记录结束时间点 输出当前时间与任务开始执行 ...

  6. c++如何获取文件时间_如何在Windows 10上获取文件或文件夹的所有权

    要访问Windows 10上的任何文件或文件夹,你必须具有相应的权限.遗憾的是,如果你没有编辑某些文件和文件夹的权限,则可能会出现某些问题,这时你必须对该文件夹或文件取得所有权. 要想取得某个文件夹的 ...

  7. 【转载】设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

    设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 原文地址:http://www.vonwei.com/post/UniqueDeviceIDfor ...

  8. linux qt 获取u盘名称,QT windows平台下获取U盘 QComboBox显示U盘盘符

    在windows平台下获取U盘信息,可以调用windows API函数比较方便.本来想用qt 来写的,网上关于这方面的代码比较多,但按照提示的步骤来写的就是无法编译,我也不知道为什么.如果有知道的朋友 ...

  9. 【Flutter 异步编程 - 捌】 | 计算耗时? Isolate 来帮忙

    一.问题引入 - 计算密集型任务 假如现在有个需求,我想要计算 1 亿 个 1~10000 间随机数的平均值,在界面上显示结果,该怎么办? 可能有小伙伴踊跃发言:这还不简单,生成 1 亿 个随机数,算 ...

最新文章

  1. CUDA之单thread单block多thread单block多thread多block
  2. 如何建立和维护自己的“人脉”
  3. MIT研究发现:十大最常用数据集标签错误率达3.4%
  4. java B2B2C Springcloud多租户电子商城系统-消息驱动的微服务(消费分区)
  5. CentOS7编译安装MySQL5.7之后安装mysql-devel出错解决方案
  6. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题...
  7. python模拟登录页面下载_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...
  8. C:01---数据类型与ASCII
  9. C++判断字符是字母或数字
  10. H5调用手机摄像头拍照,如何压缩后上传
  11. 顶岗实习周记java方向_会计学院顺利召开2021届毕业生顶岗实习动员大会
  12. php 返回mp3,当从PHP提供mp3时,audio.duration在Safari上返回Infinity
  13. 在vsphere上迁移某台虚拟机的连锁步骤
  14. 或许是介绍Android Studio使用Git最详细的文章
  15. 分布式常见面试题详解
  16. Java毕业设计-企业员工考勤打卡管理系统
  17. ZigBee协议分析仪Smart PacketSniffer
  18. Kafka HW及Epoch
  19. 51nod1238(杜教筛)
  20. python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...

热门文章

  1. python语法速记, Python 3 Cheat Sheet
  2. 疫情之下,普通人高薪就业指南:学软件测试,路就不会遥远
  3. CF - 1348D | 思维
  4. 爬虫(一):用python爬取亚马逊所有家具种类前100名的商品信息(上)
  5. 杀怪物(dfs)题解
  6. “XXX.exe 中的 0xXXXXXXXX处未处理的异常: 0xC0000005: 读取位置 0xXXXXXXXX 时发生访问冲突”的一种解决方案
  7. IEEE 754 浮点数的详细分析
  8. Kotlin 协程是个什么东西?
  9. manjaro安装与配置(vscode,微信,美化,输入法)
  10. QPushButton 实现保持按下效果(转载​​)