多线程环境下怎么样确定代码的执行时间[3]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

使用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这样的测试结果(到几天我也没有明白这个时间是怎么计算的)。

本文关键:多线程环境下怎么样确定代码的执行时间
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top