QueryPerformanceFrequency用法--Windows高精度定时计数
如果想获得CPU的默认信息,包括制造商,版本号,默认频率等等,请使用:__cpuid()。如果想获得当前CPU的实际频率,请获取系统当前基频和倍频然后计算得到。
注:但是这和程序具体的运行环境有关,程序运行的流畅顺利就所用的时间就短,程序运行的环境不好,持续时间久很长。
故虽然可以实现高精度定时计数,但是程序的执行时间还是和运行环境有关,无法做到精确测量。
精确获取时间:
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
等,所以Sleep的精度还是比较低的。
QueryPerformanceFrequency用法--Windows高精度定时计数相关推荐
- QueryPerformanceFrequency使用方法--Windows高精度定时计数
在多核心或多处理器的计算机上.特别是在支持CPU频率动态调整的计算机上,windows系统下的QueryPerformanceFrequency()获取HPET(假设存在)的频率,而QueryPerf ...
- windows xp 定时执行任务(一)
windows xp 定时执行任务(一) http://lyflinux.blog.sohu.com/100371784.html schtasks /create /sc minute /mo 20 ...
- Windows服务器定时重启设置教程
Windows服务器定时重启设置教程 Windows系统的任务计划程序,可以添加计划任务,设置任务开始时间及执行的间隔,实现应用的自动执行.例如:实现定时重启.关机等常见的功能.如何使用参考以下步骤 ...
- Linux/windows系统定时任务调度总结
定时任务是办公自动化中比较重要的一环. Linux/windows系统定时任务调度总结 概述 服务启动和关闭 任务调度全局配置 用户配置文件 crontab定时任务格式 crontab定时任务实例 时 ...
- Windows xp 定时关机命令
Windows xp 定时关机命令 Windows XP的关机是由Shutdown.exe程序来控制的,位于Windows"System32文件夹中.如 果想让Windows 2000也实现 ...
- Windows 7定时关机命令shutdown
在 Win7 中,shutdown实现自动关机的方法如下: [方法一:计划任务法] 开始>>> 在搜索框输入cmd >>> 回车 >>> 调出DO ...
- 中断系统与定时/计数计时器
1. 外部中断 1.1统计 INT0 的脉冲触发的个数,满10个,则停止统计将P1.0清0 ORG 0000H LJMP START ORG 0003H LJMP EXINT0 ...
- Windows每天定时启动应用程序
Windows每天定时启动应用程序 1.win+R打开此窗口,输入compmgmt.msc 2.创建一个基本任务 3.配置任务 使用bat文件进行应用程序的定时启动与关闭 @echo off chcp ...
- STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结
STM32定时器配置(TIM1.TIM2.TIM3.TIM4.TIM5.TIM8)高级定时器+普通定时器,定时计数模式下总结 文章结构: --> 一.定时器基本介绍 --> 二.普通定时器 ...
最新文章
- JDK 1.5 新特性——自动拆箱装箱
- SSL与OpenSSL介绍
- makefile文件编写_九图记住Makefile
- Exchange 2007 安裝(-)
- oracle指定源位置怎么弄,ORACLE Goldengate测试解决源端和目标端表结构字段位置不同的2种实现方法...
- java list map 去重复_如何过滤ListMapString,Object 中的重复Map
- “金牛智慧城市”APP上线 一键可查找公厕和公园
- 防止自建控件与页面间重复引入客户端js脚本的方法
- 【Python函数优化】
- ROS学习(13)自定义机器人的ROS导航
- windows 错误代码2
- request.session使用途径
- Java基础知识(十) 多线程
- userAgent判断客户端,以及各个浏览器的ua
- Linux系统的定时任务
- 从零学前端第十七讲:小程序开发
- 如何解决Kodi的YouTube“配额超过”问题
- 计算机网络协议(五)——DNS、HTTPDNS
- 协作图(Collaboration diagram)——UML之图七
- 闲来无事,造了一个物联IOT平台
热门文章
- CSS盒模型( CSS margin 属性)
- android Canvas 最基础知识总结
- 解剖JavaScript中的null和undefined
- 一篇文章让你读懂Pivotal的GemFire家族产品
- c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...
- Linux下三个密码生成工具
- 怎么将jenkins打包后的war自动部署到jetty上?
- java实现时间的比较
- gen_event中的handler和supervised handler
- 变更控制管理流程图_干货丨项目管理流程及绘制规范要点