今天项目中需要计算一个模块的运行时间,要求精度尽可能的高
原来一直使用GetTickCount()函数,如下:
- DWORD dwStart = GetTickCount();
- //这里添加需要测试时间的代码模块
- DWORD dwEnd = GetTickCount();
- DWORD dtime = dwEnd - dwStart;
- printf("\n\n%d ms\n\n",d);
网上虽然说这个函数达到了ms级,但是还是不够,后来经过查找msdn找到一组精度更高的函数
- QueryPerformanceFrequency();
- QueryPerformanceCounter();
用法如下:
- LARGE_INTEGER litmp;
- LONGLONG QPart1,QPart2;
- double dfMinus,dfFreq,dfTim;
- QueryPerformanceFrequency(&litmp);
- dfFreq = (double)litmp.QuadPart;
- QueryPerformanceCounter(&litmp);
- QPart1 = litmp.QuadPart;
- //这里添加需要测试的代码模块
- QueryPerformanceCounter(&litmp);
- QPart2 = litmp.QuadPart;
- dfMinus =(double)(QPart2 -QPart1);
- dfTim = dfMinus/dfFreq;
- cout<<dfTim<<endl;
注:虽然下面这组函数看上去精度非常的高,但是他是平台相关性,即windows 9x之后的平台,支持高精度的
系统才行,使用时候别忘记了加上 #include <windows.h>
转载于:https://blog.51cto.com/marico/494509