| author | alpar |
| Tue, 02 Mar 2004 15:45:27 +0000 | |
| changeset 145 | 07c32a103bbb |
| parent 124 | 8d24100ad408 |
| child 259 | 509ba9f136d2 |
| permissions | -rw-r--r-- |
| marci@73 | 1 |
// -*- c++ -*- |
| marci@73 | 2 |
#ifndef TIME_MEASURE_H |
| marci@73 | 3 |
#define TIME_MEASURE_H |
| marci@73 | 4 |
|
| marci@73 | 5 |
#include <sys/time.h> |
| alpar@117 | 6 |
#include <sys/times.h> |
| alpar@117 | 7 |
#include <fstream> |
| alpar@117 | 8 |
#include <iostream> |
| jacint@121 | 9 |
#include <unistd.h> |
| marci@73 | 10 |
|
| marci@73 | 11 |
double currTime() {
|
| marci@73 | 12 |
timeval tv; |
| marci@73 | 13 |
//timezone tz; |
| marci@73 | 14 |
gettimeofday(&tv, 0); |
| marci@73 | 15 |
return double(tv.tv_sec)+double(tv.tv_usec)/1000000.0; |
| marci@73 | 16 |
} |
| marci@73 | 17 |
|
| alpar@117 | 18 |
class TimeStamp |
| alpar@117 | 19 |
{
|
| alpar@117 | 20 |
tms ts; |
| alpar@118 | 21 |
double real_time; |
| alpar@118 | 22 |
|
| alpar@117 | 23 |
public: |
| alpar@117 | 24 |
|
| alpar@117 | 25 |
tms &getTms() {return ts;}
|
| alpar@117 | 26 |
const tms &getTms() const {return ts;}
|
| alpar@118 | 27 |
double getRealTime() const {return real_time;}
|
| alpar@118 | 28 |
void stamp() |
| alpar@118 | 29 |
{
|
| alpar@118 | 30 |
timeval tv; |
| alpar@118 | 31 |
times(&ts); |
| alpar@118 | 32 |
gettimeofday(&tv, 0);real_time=tv.tv_sec+double(tv.tv_usec)/1e6; |
| alpar@118 | 33 |
} |
| alpar@118 | 34 |
|
| alpar@118 | 35 |
TimeStamp() |
| alpar@118 | 36 |
{ ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;}
|
| alpar@118 | 37 |
|
| alpar@117 | 38 |
TimeStamp(void *) { stamp();}
|
| alpar@117 | 39 |
|
| alpar@117 | 40 |
TimeStamp &operator+=(const TimeStamp &b) |
| alpar@117 | 41 |
{
|
| alpar@117 | 42 |
ts.tms_utime+=b.ts.tms_utime; |
| alpar@117 | 43 |
ts.tms_stime+=b.ts.tms_stime; |
| alpar@117 | 44 |
ts.tms_cutime+=b.ts.tms_cutime; |
| alpar@117 | 45 |
ts.tms_cstime+=b.ts.tms_cstime; |
| alpar@118 | 46 |
real_time+=b.real_time; |
| alpar@117 | 47 |
return *this; |
| alpar@117 | 48 |
} |
| alpar@117 | 49 |
TimeStamp operator+(const TimeStamp &b) const |
| alpar@117 | 50 |
{
|
| alpar@117 | 51 |
TimeStamp t(*this); |
| alpar@117 | 52 |
return t+=b; |
| alpar@117 | 53 |
} |
| alpar@117 | 54 |
TimeStamp &operator-=(const TimeStamp &b) |
| alpar@117 | 55 |
{
|
| alpar@117 | 56 |
ts.tms_utime-=b.ts.tms_utime; |
| alpar@117 | 57 |
ts.tms_stime-=b.ts.tms_stime; |
| alpar@117 | 58 |
ts.tms_cutime-=b.ts.tms_cutime; |
| alpar@117 | 59 |
ts.tms_cstime-=b.ts.tms_cstime; |
| alpar@118 | 60 |
real_time-=b.real_time; |
| alpar@117 | 61 |
return *this; |
| alpar@117 | 62 |
} |
| alpar@117 | 63 |
TimeStamp operator-(const TimeStamp &b) const |
| alpar@117 | 64 |
{
|
| alpar@117 | 65 |
TimeStamp t(*this); |
| alpar@117 | 66 |
return t-=b; |
| alpar@117 | 67 |
} |
| alpar@117 | 68 |
|
| alpar@117 | 69 |
TimeStamp Ellapsed() const |
| alpar@117 | 70 |
{
|
| alpar@117 | 71 |
TimeStamp t(NULL); |
| alpar@117 | 72 |
return t-*this; |
| alpar@117 | 73 |
} |
| alpar@117 | 74 |
|
| alpar@117 | 75 |
friend std::ostream& operator<<(std::ostream& os,const TimeStamp &t); |
| alpar@117 | 76 |
|
| alpar@118 | 77 |
double getUserTime() const |
| alpar@118 | 78 |
{
|
| alpar@124 | 79 |
return double(ts.tms_utime)/sysconf(_SC_CLK_TCK); |
| alpar@118 | 80 |
} |
| alpar@118 | 81 |
double getSystemTime() const |
| alpar@118 | 82 |
{
|
| alpar@124 | 83 |
return double(ts.tms_stime)/sysconf(_SC_CLK_TCK); |
| alpar@118 | 84 |
} |
| alpar@118 | 85 |
double getCUserTime() const |
| alpar@118 | 86 |
{
|
| alpar@124 | 87 |
return double(ts.tms_cutime)/sysconf(_SC_CLK_TCK); |
| alpar@118 | 88 |
} |
| alpar@118 | 89 |
double getCSystemTime() const |
| alpar@118 | 90 |
{
|
| alpar@124 | 91 |
return double(ts.tms_cstime)/sysconf(_SC_CLK_TCK); |
| alpar@118 | 92 |
} |
| alpar@117 | 93 |
}; |
| alpar@117 | 94 |
|
| alpar@117 | 95 |
class Timer |
| alpar@117 | 96 |
{
|
| alpar@117 | 97 |
TimeStamp start_time; |
| alpar@117 | 98 |
|
| alpar@124 | 99 |
void _reset() {start_time.stamp();}
|
| alpar@128 | 100 |
|
| alpar@117 | 101 |
public: |
| alpar@124 | 102 |
Timer() {_reset();}
|
| alpar@117 | 103 |
|
| alpar@117 | 104 |
operator TimeStamp () |
| alpar@117 | 105 |
{
|
| alpar@117 | 106 |
TimeStamp t; |
| alpar@117 | 107 |
t.stamp(); |
| alpar@117 | 108 |
return t-start_time; |
| alpar@124 | 109 |
} |
| alpar@128 | 110 |
|
| alpar@124 | 111 |
TimeStamp reset() |
| alpar@124 | 112 |
{
|
| alpar@124 | 113 |
TimeStamp t(start_time); |
| alpar@124 | 114 |
_reset(); |
| alpar@124 | 115 |
return start_time-t; |
| alpar@124 | 116 |
} |
| alpar@117 | 117 |
}; |
| alpar@117 | 118 |
|
| alpar@117 | 119 |
inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t) |
| alpar@117 | 120 |
{
|
| alpar@117 | 121 |
long cls = sysconf(_SC_CLK_TCK); |
| alpar@118 | 122 |
os << "u: " << double(t.getTms().tms_utime)/cls << |
| alpar@117 | 123 |
"s, s: " << double(t.getTms().tms_stime)/cls << |
| alpar@117 | 124 |
"s, cu: " << double(t.getTms().tms_cutime)/cls << |
| alpar@118 | 125 |
"s, cs: " << double(t.getTms().tms_cstime)/cls << |
| alpar@118 | 126 |
"s, real: " << t.getRealTime() << "s"; |
| alpar@117 | 127 |
return os; |
| alpar@117 | 128 |
} |
| alpar@117 | 129 |
|
| marci@73 | 130 |
#endif //TIME_MEASURE_H |