天天看点

windows 之时间函数

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;