使用GetThreadTimes得到的时间单位也是毫秒级别的
3. 使用QueryPerformanceCounter
代码示例:
LARGE_INTEGER m_liPerfFreq;
LARGE_INTEGER m_liPerfStart;
QueryPerformanceFrequency(&m_liPerfFreq);
QueryPerformanceCounter(&m_liPerfStart);
//被测试的代码
LARGE_INTEGER liPerfNow;
QueryPerformanceCounter(&liPerfNow);
__int64 totalTime = (((liPerfNow.QuadPart- m_liPerfStart.QuadPart)*1000000)
/m_liPerfFreq.QuadPart);
使用第一种方法的缺点我们已经说过了,它假定你的程序不被打断的执行,这样才能得到正确的时间,而这种情况在一个同时运行了其他程序的环境下几乎是不存在的,所以这个方式的误差最大,得到的值也没有什么规律,如果使用第一种方法,最好要多次测试,取平均值是有帮助的。
使用第二种方法一般情况下可以得到线程的执行时间,该函数被设计就是用来得到线程得到了多少CPU时间,所以相对于第一种方法就准确的多;但我在多次测试的时候发现,使用该方法在测试比较短的时间(小于1毫秒)时会出现一些奇怪的现象,你可能多次得到一个0的结果,但突然得到一个15ms这样的测试结果(到几天我也没有明白这个时间是怎么计算的)。