获取时间函数有:
GetTickCount(),C(OleDate)Time::GetCurrentTime()等
要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)//获取系统的计数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)//获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
LARGE_INTEGER nEndTime;
QueryPerformanceFrequency(&m_nFreq); // 获取时钟周期
QueryPerformanceCounter(&m_nBeginTime); // 获取时钟计数
Sleep(100); QueryPerformanceCounter(&nEndTime);
TRACE("%d ",(nEndTime.QuadPart-m_nBeginTime.QuadPart)*1000/m_nFreq.QuadPart );
注意:出现偏差是因为Sleep的缘故
替代Sleep的函数:
void SleepTimer(DWORD iMs)
{
LARGE_INTEGER nBeginTime,nEndTime;// 获得计数器的时钟频率
QueryPerformanceCounter(&nBeginTime);
QueryPerformanceCounter(&nEndTime);
DWORD dfMinus=(nEndTime.QuadPart-nBeginTime.QuadPart)*1000/m_nFreq.QuadPart; MSG msg;
while(dfMinus { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{ //GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(iMs-dfMinus>10)
Sleep(iMs-dfMinus-10);
QueryPerformanceCounter(&nEndTime);
dfMinus=(nEndTime.QuadPart-nBeginTime.QuadPart)*1000/m_nFreq.QuadPart;
}
return ;
} 个人设置,如果能改进更好。