Win32函数Sleep的精度测试
用了三种方法,第一种使用高精度性能计数器;第二种是使用多媒体定时器,另一种是《Windows图形编程》里提供的CPU周期来获取。推荐第一种方式测量:
先看第一种:
- #include <windows.h>
- #include <stdio.h>
- void main()
- {
- LARGE_INTEGER litmp;
- LONGLONG qt1,qt2;
- double dft,dff,dfm;
- //获得时钟频率
- QueryPerformanceFrequency(&litmp);//获得时钟频率
- dff=(double)litmp.QuadPart;
- //获得初始值
- QueryPerformanceCounter(&litmp);
- qt1=litmp.QuadPart;
- //下面一些耗时的操作
- Sleep(1);
- //获得终止值
- QueryPerformanceCounter(&litmp);
- qt2=litmp.QuadPart;
- //获得对应的时间值,转到毫秒单位上
- dfm=(double)(qt2-qt1);
- dft=dfm/dff;
- printf("用时: %.3f 毫秒\n", dft*1000.0);
- }
我的机器上为Sleep(1) = 0.454ms;Sleep(10) = 9.719ms;Sleep(100) = 99.541ms
下面是另外两种供参考:
- #include <stdio.h>
- #include <Windows.h>
- #include <Mmsystem.h>
- #include "timer.h"
- #pragma comment(lib, "winmm.lib")
- int i = 0;
- DWORD start;
- DWORD end;
- #define TIMES (1000)
- void main()
- {
- ////////////////////////////////////////////////////////////////////////////////
- //
- // 1. 使用高精度定时器初始化
- //
- //高精度定时器初始化
- // 注意: 如果不执行下面的初始化为1ms的语句,将影响Sleep()的精度
- ::timeBeginPeriod(1);
- Sleep(100);
- //开始计时
- start = ::timeGetTime();
- for (i=0; i<TIMES; i++)//累计测试
- {
- Sleep(1);
- }
- //结束计时
- end = ::timeGetTime();
- printf("使用高精度定时器测试Sleep(1)时间: %.3f ms\n", (end-start)/((double)TIMES));
- ////////////////////////////////////////////////////////////////////////////////
- //
- // 2. 使用CPU周期数方式获取
- //
- KTimer timer;
- //下面获取CPU的速度(MHz)
- timer.Start();
- Sleep(1000);
- unsigned __int64 cpuspeed = (unsigned)(timer.Stop()/1000000);
- printf("CPU速度: %I64d MHz\n", cpuspeed);
- //开始测试
- timer.Start();
- Sleep(1);
- //结束
- unsigned __int64 time = (unsigned) timer.Stop();
- printf("使用CPU周期数测得Sleep(1)时间: %I64d μs\n", time/cpuspeed);
- //
- // 测试完毕后,将定时精度调回来
- //
- ::timeEndPeriod(1);
- }
Win32函数Sleep的精度测试的更多相关文章
- C# 互操作性入门系列(二):使用平台调用调用Win32 函数
好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...
- [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- 关于 pgsql 数据库json几个函数用法的效率测试
关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...
- 在C#中调用Win32函数EnumWindows枚举所有窗口。
原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一. ...
- JavaScript回调函数及数组方法测试
JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...
- elasticsearch 聚合函数 max double精度损失bug
测试样例数据{ "size" : 0, "query" : { "bool" : { "must" : { " ...
- PHP Socket 编程之9个主要函数的使用之测试案例
php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...
- TRUNC函数,ORA-01898 精度说明符过多
TRUNC(SYSDATE)即可默认当前日期(年月日),TRUNC(SYSDATE,'yyyy-mm-dd'),精度说明符过多
- C# 中使用win32函数 GetScrollInfo返回false 返回引用全是零的问题
最近做一个项目要获得ScrollBar的位置,因为.net找不到此类功能,只好用MFC中的函数了,GetScrollPos只返回listview顶部的位置,此时我找到了GetScrollInfo,觉得 ...
随机推荐
- Qt5-控件-QRadioButton-单选按钮-用于从多个选项中选取一个-单选神器
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QRadioButton> ...
- Mysql中存储方式的区别
MySQL的表属性有:MyISAM 和 InnoDB 2种存储方式: MyISAM 不支持事务回滚 InnoDB 支持事务回滚 可以用 show create table tablename 命令看表 ...
- kafka教程
一.理论介绍(一)相关资料1.官方资料,非常详细: http://kafka.apache.org/documentation.html#quickstart2.有一篇翻译版,基本一致,有些细节不 ...
- jquery 获取 outerHtml 包含当前节点本身的代码
在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然后我们有时候确需要,找遍jQuery api文档也没有任何方法可以拿到. 看到有的人通过pare ...
- nginx_笔记分享_php-fpm详解
参考 http://syre.blogbus.com/logs/20092011.htmlhttp://www.mike.org.cn/articles/what-is-cgi-fastcgi-php ...
- linux运维面试题汇总一
1.如何让history历史命令显示命令使用的具体时间? [root@node0 ~]# export HISTTIMEFORMAT='%F %T ' [root@node0 ~]# history ...
- web安全:sql 注入
sql注入获取webshell寻找sql注入页面,操作数据库的地方向网站写入sql语句' union select 1,2, '<?php system($_GET["cmd" ...
- jsp js java
Java技术 J a v a是一种 简单易用. 完全面向对象. 具有平台无关性且 安全可靠的主要面向I n t e r n e t的开发工具. 自从1 9 9 5年正式问世以来,J a v a的快速发 ...
- 一些我后写出来的awk脚本
mail.awk function mailByShell(receiver, sender, subject, content, __ARGVEND__, xhead, xfrom, xmime, ...
- 【HDOJ】2722 Here We Go(relians) Again
根据矩阵建图,然后求最短路径. #include <cstdio> #include <cstring> #include <cstdlib> #define L ...