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