精确获取时间

QueryPerformanceFrequency() - 基本介绍

类型:Win32API

原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

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

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

QueryPerformanceFrequency() - 技术特点

供WIN9X使用的高精度定时器:QueryPerformanceFrequency()和QueryPerformanceCounter(),要求计算机从硬件上支持高精度定时器。需包含windows.h头文件。

函数的原形是:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);

数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typeef union _ LARGE_INTEGER

{

struct

{

DWORD LowPart;

LONG HighPart;

};

LONGLONG QuadPart;

} LARGE_INTEGER;

在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。

测试Sleep的精确时间:

  1. #include <stdio.h>
  2. #include <windows.h>
  3. void main()
  4. {
  5. LARGE_INTEGER nFreq;
  6. LARGE_INTEGER nBeginTime;
  7. LARGE_INTEGER nEndTime;
  8. double time;
  9. QueryPerformanceFrequency(&nFreq);
  10. QueryPerformanceCounter(&nBeginTime);
  11. Sleep(1000);
  12. QueryPerformanceCounter(&nEndTime);
  13. time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
  14. printf("%f\n",time);
  15. Sleep(1000);
  16. system("Pause");
  17. }

结果为

0.999982

1.000088

1.000200

单位为妙,乘1000000即为微秒

------------------------------------------------------------------------

一个MyTimer类及使用

//MyTimer.h

  1. #ifndef MYTIMER_H
  2. #define MYTIMER_H
  3. #include <windows.h>
  4. class MyTimer
  5. {
  6. private:
  7. LONGLONG _freq;
  8. LARGE_INTEGER _begin;
  9. LARGE_INTEGER _end;
  10. public:
  11. long costTime; // 花费的时间(精确到微秒)
  12. public:
  13. MyTimer()
  14. {
  15. LARGE_INTEGER tmp;
  16. QueryPerformanceFrequency(&tmp);
  17. _freq=tmp.QuadPart;
  18. costTime=0;
  19. }
  20. void Start() // 开始计时
  21. {
  22. QueryPerformanceCounter(&_begin);
  23. }
  24. void End() // 结束计时
  25. {
  26. QueryPerformanceCounter(&_end);
  27. costTime=(long)((_end.QuadPart - _begin.QuadPart) * 1000000 / _freq);
  28. }
  29. void Reset() // 计时清0
  30. {
  31. costTime = 0;
  32. }
  33. };
  34. #endif

//MyTimer.cpp

  1. #include "stdafx.h"
  2. #include "MyTimer.h"
  3. #include <iostream>
  4. using namespace std;
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. int i = 10000;
  8. MyTimer mt;
  9. mt.Start();
  10. while((i--)>0);
  11. mt.End();
  12. cout<<"所用时间为 " << mt.costTime << "us"<<endl;
  13. return 0;
  14. }

Windows获取精确系统时间-微秒级相关推荐

  1. Windows下C/C++获取当前系统时间

    Windows下CC获取当前系统时间 方案一localtime 优点仅使用C标准库缺点只能精确到秒级 方案二GetLocalTime sys   优点能精确到毫秒级缺点使用了windows API 方 ...

  2. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...

    核心提示:C语言中如何获取时间?精度如何?1使用time_ttime(time_t*timer)精确到秒2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3计 ...

  3. C++怎样获取当前系统时间?

    C++怎样获取当前系统时间? 1.调用cmd函数来获取当前时间 2.识别系统API来获取当前时间 3.直接获取系统时间 1.调用cmd函数来获取当前时间 这个模块并不是特别的麻烦,因为这种方法是直接使 ...

  4. Oracle——获取当前系统时间以及插入日期型数据(to_date的用法)

    获取当前系统时间 日期时间数据类型存储日期和时间值,包括年.月.日,小时.分钟.秒 主要的日期时间类型有: 1.DATE - 存储日期和时间部分,精确到整个的秒 语法 Select sysdate f ...

  5. 获取UNIX系统时间

    ① 基本认识 UNIX系统时间主要分为两种: 日历时间 和 进程时间 ② 日历时间 该时间是自协调时间时间 1970年1月1日 00:00:00这个特定时间来计算累积的秒数.(称为UTC 格林尼治标准 ...

  6. C++获取当前系统时间

    在Linux环境下,C++获取当前系统时间的相关代码: #include <stdio.h> #include <stdlib.h> #include <time.h&g ...

  7. JAVA中获取当前系统时间

    JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...

  8. python获取当前时间的函数_java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数...

    java转换成秒数 Date类有一个getTime()可以换回秒数,例如: public classDateToSecond {public static voidmain(String[] args ...

  9. 关于Java中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public class ...

最新文章

  1. Windows文件操作的直接函数调用
  2. 我进公司当Android开发实习生时,初中最差的同学成了我的领导
  3. AJAX+JQUERRY实现分页
  4. 八篇 NeurIPS 2019 最新图神经网络相关论文
  5. Redis 五种数据结构以及三种高级数据结构解析以及使用
  6. Win7 路由上网DNS服务器ping不通的解决方法
  7. spark python 上传代码包_使用 Livy Rest API 提交 spark 批量任务 (jar,Python, streaming)...
  8. [2018-2019上] 第一次过程性考核成绩
  9. spring cloud(2)---微服务写的最全的一篇文章
  10. PAT 甲级 1003
  11. php5.3 本地调试,php5.3 xdebug 调试器安装配置
  12. php中的魔术常量__FILE__
  13. [源码和报告分享]基于Android-JavaEE-DB2实现的旧物交易平台
  14. 百度开源的 71 个项目,太牛逼了!
  15. map转list对象方法,通过stream或者iterator.key集合转list,values集合转list
  16. 20个数据可视化工具点评
  17. html对话框取消确定,alert 确定 取消
  18. 【MySQL 8.0】导入 .frm .MYD .MYI
  19. 百度、谷歌搜索引擎接口
  20. oracle数据文件recover,又遇BUG-ORA-01148:数据文件忽然变为recover状态

热门文章

  1. 电商平台该如何未雨绸缪?
  2. 20230515在亚马逊Amazon扣费之后的申诉
  3. 菜根谭 全文及译文下载
  4. 如何解决:“Avoid hardcoding the debug mode
  5. c生万物【第一章 初识c语言】
  6. 【Python三体问题】
  7. 给计算机老师致歉信,给老师道歉信四篇
  8. WordPress Qui-Pure V2.22发布纯文本主题-暗黑模式
  9. 读《曾国藩》中义理之学的感悟
  10. python中的返回值是什么意思_python中函数的返回值是什么