一般我们用clock()获取的都是ms毫秒级 但有很多时候毫秒级是不够的,微秒级是运用cpu滴嗒数来计数的。
精确时间,微秒级us,在实际编程中是非常重要的,是检验算法非常好的方法之一。现在就来讲讲win下是如何获取的。
这里要用到两个win?api函数
1.QueryPerformanceFrequency()? ?每秒CPU滴嗒次数
2.QueryPerformanceCounter()? CPU滴嗒数
方法就是,开始先获取? CPU滴嗒数 starttime,结束进再获取一次endtime,
endtime – startime 再除 ?/每秒CPU滴嗒次数。就是多少秒了,
将秒数转换成毫秒,公式如下:
1S = 1000ms? ? ? ? ? ? ? ? 1ms = 1000us
下面写下具体实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//--------------------------------------------------------------------------- ULONGLONG PreciseClock_us() { LARGE_INTEGER Start = {0}; QueryPerformanceCounter(&Start); return Start.QuadPart; } //--------------------------------------------------------------------------- double PreciseClockAbs_us(ULONGLONG StartTime) { LARGE_INTEGER QF = {0}; QueryPerformanceFrequency(&QF); LARGE_INTEGER End = {0}; QueryPerformanceCounter(&End); double times = (End.QuadPart- StartTime) /(double)QF.QuadPart; return times*1000*1000; } //--------------------------------------------------------------------------- |
有了这以上封好的两个函数,在计算代码运行时间将会方便很多,
例:
1 2 3 4 5 |
ULONGLONG starttime = PreciseClock_us(); /*** 要测试的代码 **/// double times = PreciseClockAbs_us(starttime); |
如要写好dll 代码,可以用git直接下载,地址:git@gitee.com:royzou/PreciseTime.git
网址:https://gitee.com/royzou/PreciseTime