[go: up one dir, main page]

Menu

[8bf46b]: / common / timer.h  Maximize  Restore  History

Download this file

102 lines (83 with data), 1.8 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#ifndef TIMER_HEADER
#define TIMER_HEADER
/* Simple timer class by Roman Dementiev
*/
#include "../common/utils.h"
#include <time.h>
#ifndef BOOST_MSVC
#include <sys/time.h>
#endif
#ifdef STXXL_BOOST_TIMESTAMP
#include <boost/date_time/posix_time/posix_time.hpp>
#include <math.h>
#endif
__STXXL_BEGIN_NAMESPACE
class timer
{
bool running;
double accumulated;
double last_clock;
inline double timestamp();
public:
inline timer();
inline void start();
inline void stop();
inline void reset();
inline double seconds();
inline double mseconds();
inline double useconds();
};
timer::timer():running(false),accumulated(0.)
{
}
double timer::timestamp()
{
#ifdef STXXL_BOOST_TIMESTAMP
boost::posix_time::ptime MyTime = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration Duration = MyTime.time_of_day();
double sec= double(Duration.hours())*3600. +
double(Duration.minutes())*60. +
double(Duration.seconds()) +
double(Duration.fractional_seconds())/(pow(10.,Duration.num_fractional_digits()));
return sec;
#else
struct timeval tp;
gettimeofday(&tp, NULL);
return double(tp.tv_sec) + tp.tv_usec / 1000000.;
#endif
}
void timer::start()
{
running = true;
last_clock = timestamp();
}
void timer::stop()
{
running = false;
accumulated += timestamp() - last_clock;
}
void timer::reset()
{
accumulated = 0.;
last_clock = timestamp();
}
double timer::mseconds()
{
if(running)
return (accumulated + timestamp() - last_clock)*1000.;
return (accumulated*1000.);
}
double timer::useconds()
{
if(running)
return (accumulated + timestamp() - last_clock)*1000000.;
return (accumulated*1000000.);
}
double timer::seconds()
{
if(running)
return (accumulated + timestamp() - last_clock);
return (accumulated);
}
__STXXL_END_NAMESPACE
#endif