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)高级定时器+普通定时器,定时计数模式下总结 文章结构: --> 一.定时器基本介绍 --> 二.普通定时器 ...
最新文章
- 和达摩院深度绑定,阿里云下一个十年,成为“云上的阿里巴巴”
- LeetCode 137. Single Number II--三次异或消除相同的数--C++,Python解法
- 【JSTL】--c:out演示--drp213
- Java 过滤器解决URLSQL注入漏洞、跨站漏洞、框架注入漏洞、链接注入漏洞
- 《Effective.Enterprise.Java中文版》知识点摘要
- Zookeeper----基本原理
- Spring Cloud 微服务实战系列-Spring Boot再次入门(二)
- sql server 迁移 mysql_sql server 迁移到 mysql
- 职场真正的潜规则,毕业生却一直不重视!还自以为是的认为这是优点!!HR直接会pass这一群人!!
- RabbitMq使用demo
- 百度js推送没法用了?帝国CMS结合百度API推送方法来了
- python代码写名字_python代码实现给儿子儿女取名字
- 个人电脑秒变服务器 简单几步,你的电脑也可以成为服务器 (内网穿透)
- Java学习总结3——枚举类和反射机制
- 0-1背包问题和背包问题
- Ping 命令详解(含真实操作截图)
- 南京移动开发者沙龙(创业邦+果合)
- 斗鱼虎牙合并:从内耗走向一致抗敌
- 【Python金融量化 9- 100 】九、预测股票收益方法总结
- 网络与信息安全基础知识(软考中级)
热门文章
- Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
- Linux系统中创建大文件,并作为文件系统使用
- Ubuntu 安装 OpenCV4 详细步骤
- Dell 戴尔预装Windows8改成Windows7
- Centos 6启动流程详解
- Python - selenium_WebDriver 鼠标键盘事件
- Caliburn.Micro 资源随时添加
- blackberry Jvm error 104 错误(Device Simulator)
- Window10安装pycocotools
- python类方法调用装饰_Python3 @classmethod 函数装饰器 声明一个类方法