// // Simple class to allow events to be timed // // Copyright (C) J. Belson 2001.12.06 // // $Author: jon $ : $Date: 2003/06/03 16:46:53 $ // #ifndef _STOPWATCH_H_ #define _STOPWATCH_H_ #include #include #include /** * Measure the user time (not elapsed time) taken by an application */ class stopwatch { private: struct timeval t1, t2; public: stopwatch(void) { reset(); }; void reset(void) { struct rusage ru; getrusage(RUSAGE_SELF, &ru); t1 = ru.ru_utime; } void start(void) { struct rusage ru; getrusage(RUSAGE_SELF, &ru); t1 = ru.ru_utime; } // Number of microseconds since stopwatch started long get_time(void) { struct rusage ru; getrusage(RUSAGE_SELF, &ru); t2 = ru.ru_utime; // Adjust if necessary to ensure t2-t1 is meaningful if (t1.tv_usec > t2.tv_usec) { t2.tv_sec--; t2.tv_usec+=1000000; } long int secs = t2.tv_sec - t1.tv_sec; unsigned long int centi = (t2.tv_usec - t1.tv_usec)/10000; long int time = secs*100 + centi; return time; } }; #endif // _STOPWATCH_