#include <windows.h> #include <stdio.h> typedef unsigned long ulong_t; typedef char data_t; typedef enum _VTTimerEnum { SecondTimer , MillisecondTimer , MicrosecondTimer , NanosecondTimer , VTTimerMax }VTTimerEnum; struct VTTimer { static struct _TimerFactor { ulong_t m_TimerBase; data_t *m_TimerStr; }m_TimerFactor[VTTimerMax]; double m_Times; //时间基数 LARGE_INTEGER m_Start; //开始时钟 LARGE_INTEGER m_End; //结束时钟 VTTimerEnum m_Enum; //计时级别 VTTimer( VTTimerEnum _Type = MillisecondTimer ) :m_Enum( _Type ) { QueryPerformanceFrequency(&m_Start); //得到相对时间内的周期 m_Times = (double)m_Start.QuadPart / m_TimerFactor[_Type].m_TimerBase; } }; #define _StartTimer(_Timer) QueryPerformanceCounter(&((_Timer)->m_Start)) #define _StopTimer(_Timer,_Str) / QueryPerformanceCounter(&((_Timer)->m_End)); / printf("->Processing [ %s ] Time:%f %s/n", / (_Str ) , ( (_Timer)->m_End.QuadPart - (_Timer)->m_Start.QuadPart ) / (_Timer)->m_Times ,/ ( VTTimer::m_TimerFactor[(_Timer)->m_Enum].m_TimerStr ) ) VTTimer::_TimerFactor VTTimer::m_TimerFactor[VTTimerMax] = { { (ulong_t)1.00000000 , "s" } , { (ulong_t)1000.00000 , "ms" } , { (ulong_t)1000000.00 , "us" } , { (ulong_t)1000000000 , "ns" } }; int main(int argc , char **argv) { TimerType t; BeginTimer(&t); for(int i = 0 ; i < 100 ; ++i ) continue; EndLookTimer(&t,"for"); return 0; }