A simple Timer
class that provides satisfying resolution.
- Timer() constructs the timer.
- .reset() resets the timer
- .elapsed() returns elapsed seconds in
double
since last reset.
#include <iostream> | |
#include <ctime> | |
class Timer | |
{ | |
public: | |
Timer() { clock_gettime(CLOCK_REALTIME, &beg_); } | |
double elapsed() { | |
clock_gettime(CLOCK_REALTIME, &end_); | |
return end_.tv_sec - beg_.tv_sec + | |
(end_.tv_nsec - beg_.tv_nsec) / 1000000000.; | |
} | |
void reset() { clock_gettime(CLOCK_REALTIME, &beg_); } | |
private: | |
timespec beg_, end_; | |
}; | |
// Example code | |
int main() | |
{ | |
Timer tmr; | |
double t = tmr.elapsed(); | |
std::cout << t << std::endl; | |
tmr.reset(); | |
t = tmr.elapsed(); | |
std::cout << t << std::endl; | |
return 0; | |
} |
#include <iostream> | |
#include <chrono> | |
class Timer | |
{ | |
public: | |
Timer() : beg_(clock_::now()) {} | |
void reset() { beg_ = clock_::now(); } | |
double elapsed() const { | |
return std::chrono::duration_cast<second_> | |
(clock_::now() - beg_).count(); } | |
private: | |
typedef std::chrono::high_resolution_clock clock_; | |
typedef std::chrono::duration<double, std::ratio<1> > second_; | |
std::chrono::time_point<clock_> beg_; | |
}; | |
// Example code | |
int main() | |
{ | |
Timer tmr; | |
double t = tmr.elapsed(); | |
std::cout << t << std::endl; | |
tmr.reset(); | |
t = tmr.elapsed(); | |
std::cout << t << std::endl; | |
return 0; | |
} |
Thanks this was help very helpful.
@salkj Actually no. See here http://www.gnu.org/software/libc/manual/html_node/Elapsed-Time.html
In the c++03 version, are you adding the seconds and the nanoseconds representation together? If so, isn't that just representing double the time elapsed?