- ///
- //KTimer.h
- //
- //WindowsGraphicsProgrammingWin32GDIandDirectDraw®
- //FengYuan
- //Publisher:PrenticeHallPTR
- //FirstEditionDecember01,2000
- //
- //高精度纳秒计时器,最后修改:
- //2008-12bycheungmine@gmail.com
- ///
- /*Usage:
- intmain()
- {
- KTimerkt;
- unsignedintcpu_speed=kt.CPUSpeedMHz();
- kt.Start();
- Sleep(1234);
- unsignedintelapsed_cyc=(unsignedint)kt.Stop();
- printf("CPUSpeed:%.2fGhz.Elapsed%ldCPUCycles(%ldNanosecond)/n",
- cpu_speed/1000.f,
- elapsed_cyc,
- KTimer::CyclesToNanos(elapsed_cyc,cpu_speed));
- }
- */
- #pragmaonce
- #ifndefSTRICT
- #defineSTRICT
- #endif
- #ifndefWIN32_LEAN_AND_MEAN
- #defineWIN32_LEAN_AND_MEAN
- #endif
- #include<windows.h>
- inlineunsigned__int64GetCycleCount(void)
- {
- _asm_emit0x0F
- _asm_emit0x31
- }
- classKTimer
- {
- unsigned__int64m_startcycle;
- public:
- unsigned__int64m_overhead;//ClockCycles
- KTimer(void)
- {
- m_overhead=0;
- Start();
- m_overhead=Stop();
- }
- //启动CPU时钟
- voidStart(void)
- {
- m_startcycle=GetCycleCount();
- }
- //停止CPU时钟,返回自上一次启动的时钟周期数
- unsigned__int64Stop(void)
- {
- returnGetCycleCount()-m_startcycle-m_overhead;
- }
- //把以CPU周期数转为纳秒
- unsigned__int64staticCyclesToNanos(unsigned__int64time_cycles,unsignedintspeed_mhz)
- {
- returntime_cycles*1000/speed_mhz;
- }
- //把以CPU周期数转为毫秒
- unsigned__int64staticCyclesToMillis(unsigned__int64time_cycles,unsignedintspeed_mhz)
- {
- returntime_cycles/speed_mhz/1000;
- }
- //1GHz=1000MHz
- unsignedintCPUSpeedMHz()
- {
- Start();
- Sleep(1000);
- unsigned__int64cputime=Stop();
- return(unsignedint)(cputime/1000000);
- }
- };
C++高精度定时器
最新推荐文章于 2024-05-07 15:00:47 发布