125 lines
3.7 KiB
C
125 lines
3.7 KiB
C
|
|
||
|
|
||
|
#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
|