GetTickCount()
最小间隔大约为15ms, 想求ms 的精确值时该函数不可用。CPU占有率高,只能用于要求不该的延时程序中。
timeGetTime()
改时间为从系统开启算起所经过的时间。
最小间隔大约为5ms,
调用DWORD timeGetTime(void) 函数之前必须将 Winmm.lib 和 Mmsystem.h 添加到工程中,否则在编译时提示DWORD timeGetTime(void)函数未定义
。
timeBeginPeriod
(1);设置精度为1毫秒
timeEndPeriod
(1);结束精度设置 (
注意设置和结束要成对出现
)
使用timeBeginPeriod() 和 timeEndPeriod() 需要依赖头文件<windows.h 和MMSystem.h>和库(#pragma comment(lib, "winmm.lib"))
clock() 函数
返回值是硬件滴答数,换算成秒或者毫秒需要除以
CLK_TCK或者CLOCKS_PER_SEC
函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数 windows 平台的精确度大约为15~16ms
实现方法
:
clock_t start, finish;
double duration;
start = clock();
Sleep(1000);
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
精确计算程序的运行时间
:
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
返回硬件支持的高精度计数器的频率(时钟频率)。
返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
获取计数器的值
实现方法
:
在事件发生前后分别调用QueryPerformanceCounter,利用两次获得的计数差和时钟频率,就可以计算出事件经历的精确时间。
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;