1.GetTickCount函数
这个函数的作用是获取计算机的运行时间,从计算机启动算起。获取代码运行时间的一般的做法是,执行测试代码前获取一次,执行代码后获取一次,然后将两个时间相减,即为测试代码执行时间,单位是ms。
如果是远古时期单处理器批处理的计算机,这样完全没有问题。但现在的计算机大多是多处理器抢占式操作系统,这么做的话就会有误差。在计算测试代码运行时间的过程中,极有可能切换到别的线程去处理别的任务,最终计算出的结果就会偏大。所以这个函数只能用在误差要求不是很准确的地方。
2.GetThreadTimes和GetProcessTimes函数
这两个函数分别用来获取线程和进程的运行时间。其函数原型如下:
BOOL GetThreadTimes( HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
3.QueryPerformanceCounter函数
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency ); // 获取CPU频率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount ); // 获取当前CPU计算值
流程同上边一样,实例代码如下:
LARGE_INTEGER i64Frequency;
if(!QueryPerformanceFrequency(&i64Frequency))
{
CString str;
str.Format("Get CPU Frequency Is Error : %ld",GetLastError());
AfxMessageBox(str);
}
LARGE_INTEGER i64CountStart;
if(!QueryPerformanceCounter(&i64CountStart))
{
CString str;
str.Format("Get CPU Count Start Is Error : %ld",GetLastError());
AfxMessageBox(str);
}
Sleep(100);
LARGE_INTEGER i64CountEnd;
if(!QueryPerformanceCounter(&i64CountEnd))
{
CString str;
str.Format("Get CPU Count End Is Error : %ld",GetLastError());
AfxMessageBox(str);
}
__int64 i64MSCount = (i64CountEnd.QuadPart - i64CountStart.QuadPart) * 1.0 / i64Frequency.QuadPart * 1000;
CString str;
str.Format("%ld",i64MSCount);
AfxMessageBox(str);