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