用了两种方法,一种是使用多媒体定时器,另一种是《Windows图形编程》里提供的CPU周期来获取:
#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);
}