您的位置:首页 > 其它

[win32] GetTickCount和TimeGetTime

2016-07-05 15:22 621 查看
GetTickCount精度是15ms左右,TimeGetTime的精度是1ms。游戏里面一般用的是GetTickCount。

Sleep不是一个很稳定的过程,所以当SleepTime比较小的时候,比如1-10ms的时候,两次运行,结果会有比较大的差异。Sleep在100ms以上的时候,基本上两个方法得到时间基本上是相近的。

#include <iostream>
#include <d3dx9.h>
using namespace std;

void TestTime(int nLoopNum, int nSleepTime);

int main(int argc, char* argv[])
{
const int nLoopNum = 8;
//	for(int nSleepTime = 1; nSleepTime < 10; nSleepTime+=1)
//		TestTime(nLoopNum, nSleepTime);
for(int nSleepTime = 1; nSleepTime <= 251; nSleepTime+=50)
TestTime(nLoopNum, nSleepTime);

return 0;
}

void TestTime(const int nLoopNum, const int nSleepTime)
{
cout << "---------------------------------------------------------" << endl;
cout << "loop num = " << nLoopNum << ", sleep time = " << nSleepTime << endl;
cout << "---------------------------------------------------------" << endl;

DWORD dwLastTickCount = GetTickCount();
DWORD dwCurTickCount = dwLastTickCount;
DWORD dwTimeDiff[100];

int nLoopCount = nLoopNum;
while(nLoopCount > 0)
{
Sleep(nSleepTime);
dwCurTickCount = GetTickCount();
dwTimeDiff[nLoopNum - nLoopCount] = dwCurTickCount - dwLastTickCount;
dwLastTickCount = dwCurTickCount;
--nLoopCount;
}
for(nLoopCount = 0; nLoopCount < nLoopNum; nLoopCount++)
{
cout << "TickCount:\t" << dwTimeDiff[nLoopCount] << endl;
}

DWORD dLastTime = timeGetTime();
DWORD dCurTime = timeGetTime();

nLoopCount = nLoopNum;
while(nLoopCount > 0)
{
Sleep(nSleepTime);
dCurTime = timeGetTime();
dwTimeDiff[nLoopNum - nLoopCount] = dCurTime - dLastTime;
dLastTime = dCurTime;
--nLoopCount;
}
for(nLoopCount = 0; nLoopCount < nLoopNum; nLoopCount++)
{
cout << "TimeGetTime:\t" << dwTimeDiff[nLoopCount] << endl;
}
}












内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: