#ifndef T_STOPWATCH_INCLUDED #define T_STOPWATCH_INCLUDED #include "tcommon.h" #undef DVAPI #undef DVVAR #ifdef TNZCORE_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif #ifdef _WIN32 #include "windows.h" #endif //=============================================================== /** * This is an example of how to use stopwatch. */ /*! The TStopWatch class allows you to recording time (in milliseconds) taken by your process or by system to perform various tasks. It is possible to record these times: Total Time, User Time and System Time. A stop watch is identified by a name that describes meaningfully its use. */ #ifdef _WIN32 #define TM_TOTAL DWORD #define TM_USER __int64 //user time (time associated to the process calling stop watch)(unit=100-nanosecond) #define TM_SYSTEM __int64 //system time (unit=100-nanosecond) #define START DWORD //total starting reference time in milliseconds #define START_USER FILETIME //process starting reference time (unit=100-nanosecond) #define START_SYSTEM FILETIME //system starting reference time (unit=100-nanosecond) #else #define TM_TOTAL clock_t #define TM_USER clock_t #define TM_SYSTEM clock_t #define START clock_t #define START_USER clock_t #define START_SYSTEM clock_t #endif class DVAPI TStopWatch { string m_name; //stopwatch name TM_TOTAL m_tm; //elapsed total time (in milliseconds) TM_USER m_tmUser; //elapsed user time (time associated to the process calling stop watch)(unit=100-nanosecond) TM_SYSTEM m_tmSystem; //elapsed system time (unit=100-nanosecond) START m_start; //total starting reference time in milliseconds START_USER m_startUser; //process starting reference time (unit=100-nanosecond) START_SYSTEM m_startSystem; //system starting reference time (unit=100-nanosecond) #ifdef _WIN32 LARGE_INTEGER m_hrStart; // high resolution starting reference (total) time #endif bool m_active; // sw e' stato usato (e' stato invocato il metodo start()) bool m_isRunning; // fra start() e stop() void setStartToCurrentTime(); void getElapsedTime(TM_TOTAL &tm, TM_USER &user, TM_SYSTEM &system); public: TStopWatch(string name = ""); ~TStopWatch(); void reset(); /*!Start the stop watch. If reset=true the stop watch is firstly reset.*/ void start(bool resetFlag = false); void stop(); /*!Returns the number of milliseconds that have elapsed in all the start()-stop() intervals since the stopWatch was resetted up to the getTotalTime() call. The method can be called during a start()-stop() interval */ TUINT32 getTotalTime(); /*!Returns the amount of time that the process has spent executing application code. see getTotalTime() */ TUINT32 getUserTime(); /*!Returns the amount of time that the process has spent executing operating system code. see getTotalTime() */ TUINT32 getSystemTime(); const string &getName() { return m_name; }; void setName(string name) { m_name = name; }; /*!Returns a string containing the recorded times.*/ operator string(); /*!Print (to cout) the name and the relative total,user and system times of the stop watch. see getTotalTime()*/ void print(ostream &out); void print(); private: static TStopWatch StopWatch[10]; public: /*! TStopWatch::global(index) is a global array of 10 stop watches. */ static TStopWatch &global(int index) { assert(0 <= index && index < 10); return StopWatch[index]; }; /*! Allows you to print the name and the relative total, user and system times of all the active stop watches. */ static void printGlobals(ostream &out); static void printGlobals(); }; //----------------------------------------------------------- #endif // __T_STOPWATCH_INCLUDED