Win32函数Sleep的精度测试
2015-05-13 16:14
316 查看
用了三种方法,第一种使用高精度性能计数器;第二种是使用多媒体定时器,另一种是《Windows图形编程》里提供的CPU周期来获取。推荐第一种方式测量:
先看第一种:
[cpp] view plaincopy
#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
下面是另外两种供参考:
[cpp] view plaincopy
#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的精度测试
- Windows时钟函数精度测试
- 除了SLEEP还有没有更高精度的函数啊?
- 关于Sleep的精度测试
- 关于bind函数和connect函数的测试结论
- 理解 Thread.Sleep 函数
- Win32汇编程序——一个窗口函数
- 经典笔试题:用C写一个函数测试当前机器大小端模式
- zz 高效的中文字符串截取函数,附带一个性能测试方法Benchmark_Iterate
- 用php实现ping命令,测试速度,但是exec()函数用不了。
- 嵌入式 解决线程使用sleep或usleep等函数导致整个进程睡眠的问题
- C#中 Thread.Sleep精度问题
- 对数组进行排序、求最大值和求元素和的算法都编写为函数模板,采用相关数据进行测试。
- 关于Sleep()函数不准确和随机数的问题
- 用pywinauto进行win32应用程序的测试
- js中(function(){…})()立即执行函数写法理解(经过控制台测试后修改) <转载>
- 理解 Thread.Sleep 函数
- 一个测试运行时间的函数
- isprint字符串测试函数应用实例
- Win32 API消息函数:PostMessage