Win32函数Sleep的精度测试
2013-07-16 14:32
423 查看
用了三种方法,第一种使用高精度性能计数器;第二种是使用多媒体定时器,另一种是《Windows图形编程》里提供的CPU周期来获取。推荐第一种方式测量:
先看第一种:
我的机器上为Sleep(1) = 0.454ms;Sleep(10) = 9.719ms;Sleep(100) = 99.541ms
下面是另外两种供参考:
先看第一种:
#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的精度测试
- 除了SLEEP还有没有更高精度的函数啊?
- 关于Sleep的精度测试
- Windows时钟函数精度测试
- 编写一个函数模板,可对两个任意格式的数值(包括字符格式)进行比较,返回两者的最小值,同时保证较高的精度。
- NSGA-Ⅱ算法大量测试函数实验结果展示
- Win32 API 常用函数之三——注册表操作(上)
- 时间的函数,sleep,clock,gettickcount,....
- CryptoAPI函数测试实例代码
- 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和,对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数
- 去年写的测试GDAL用法的一些函数
- 收藏——在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- Fortran 函数中单精度,双精度不匹配的错误
- linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠
- python中doctest自我测试(测试模块中的函数是否对)
- sleep 函数
- Linux内核分析 函数调用堆栈与mykernel实验基础测试
- 一个小的python输出函数测试
- MATLAB BP网络工具箱中不同学习函数,训练函数和性能函数时的学习效率和精度
- C语言中 scanf函数 与getchar 函数的相关测试