Windows获取精确系统时间-微秒级
精确获取时间
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的精确时间:
- #include <stdio.h>
- #include <windows.h>
- void main()
- {
- LARGE_INTEGER nFreq;
- LARGE_INTEGER nBeginTime;
- LARGE_INTEGER nEndTime;
- double time;
- QueryPerformanceFrequency(&nFreq);
- QueryPerformanceCounter(&nBeginTime);
- Sleep(1000);
- QueryPerformanceCounter(&nEndTime);
- time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
- printf("%f\n",time);
- Sleep(1000);
- system("Pause");
- }
结果为
0.999982
1.000088
1.000200
单位为妙,乘1000000即为微秒
------------------------------------------------------------------------
一个MyTimer类及使用
//MyTimer.h
- #ifndef MYTIMER_H
- #define MYTIMER_H
- #include <windows.h>
- class MyTimer
- {
- private:
- LONGLONG _freq;
- LARGE_INTEGER _begin;
- LARGE_INTEGER _end;
- public:
- long costTime; // 花费的时间(精确到微秒)
- public:
- MyTimer()
- {
- LARGE_INTEGER tmp;
- QueryPerformanceFrequency(&tmp);
- _freq=tmp.QuadPart;
- costTime=0;
- }
- void Start() // 开始计时
- {
- QueryPerformanceCounter(&_begin);
- }
- void End() // 结束计时
- {
- QueryPerformanceCounter(&_end);
- costTime=(long)((_end.QuadPart - _begin.QuadPart) * 1000000 / _freq);
- }
- void Reset() // 计时清0
- {
- costTime = 0;
- }
- };
- #endif
//MyTimer.cpp
- #include "stdafx.h"
- #include "MyTimer.h"
- #include <iostream>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i = 10000;
- MyTimer mt;
- mt.Start();
- while((i--)>0);
- mt.End();
- cout<<"所用时间为 " << mt.costTime << "us"<<endl;
- return 0;
- }
Windows获取精确系统时间-微秒级相关推荐
- Windows下C/C++获取当前系统时间
Windows下CC获取当前系统时间 方案一localtime 优点仅使用C标准库缺点只能精确到秒级 方案二GetLocalTime sys 优点能精确到毫秒级缺点使用了windows API 方 ...
- c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
核心提示:C语言中如何获取时间?精度如何?1使用time_ttime(time_t*timer)精确到秒2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3计 ...
- C++怎样获取当前系统时间?
C++怎样获取当前系统时间? 1.调用cmd函数来获取当前时间 2.识别系统API来获取当前时间 3.直接获取系统时间 1.调用cmd函数来获取当前时间 这个模块并不是特别的麻烦,因为这种方法是直接使 ...
- Oracle——获取当前系统时间以及插入日期型数据(to_date的用法)
获取当前系统时间 日期时间数据类型存储日期和时间值,包括年.月.日,小时.分钟.秒 主要的日期时间类型有: 1.DATE - 存储日期和时间部分,精确到整个的秒 语法 Select sysdate f ...
- 获取UNIX系统时间
① 基本认识 UNIX系统时间主要分为两种: 日历时间 和 进程时间 ② 日历时间 该时间是自协调时间时间 1970年1月1日 00:00:00这个特定时间来计算累积的秒数.(称为UTC 格林尼治标准 ...
- C++获取当前系统时间
在Linux环境下,C++获取当前系统时间的相关代码: #include <stdio.h> #include <stdlib.h> #include <time.h&g ...
- JAVA中获取当前系统时间
JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...
- python获取当前时间的函数_java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数...
java转换成秒数 Date类有一个getTime()可以换回秒数,例如: public classDateToSecond {public static voidmain(String[] args ...
- 关于Java中获取当前系统时间
一. 获取当前系统时间和日期并格式化输出: 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public class ...
最新文章
- Windows文件操作的直接函数调用
- 我进公司当Android开发实习生时,初中最差的同学成了我的领导
- AJAX+JQUERRY实现分页
- 八篇 NeurIPS 2019 最新图神经网络相关论文
- Redis 五种数据结构以及三种高级数据结构解析以及使用
- Win7 路由上网DNS服务器ping不通的解决方法
- spark python 上传代码包_使用 Livy Rest API 提交 spark 批量任务 (jar,Python, streaming)...
- [2018-2019上] 第一次过程性考核成绩
- spring cloud(2)---微服务写的最全的一篇文章
- PAT 甲级 1003
- php5.3 本地调试,php5.3 xdebug 调试器安装配置
- php中的魔术常量__FILE__
- [源码和报告分享]基于Android-JavaEE-DB2实现的旧物交易平台
- 百度开源的 71 个项目,太牛逼了!
- map转list对象方法,通过stream或者iterator.key集合转list,values集合转list
- 20个数据可视化工具点评
- html对话框取消确定,alert 确定 取消
- 【MySQL 8.0】导入 .frm .MYD .MYI
- 百度、谷歌搜索引擎接口
- oracle数据文件recover,又遇BUG-ORA-01148:数据文件忽然变为recover状态