X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Ftimer.hpp;h=eac5194036300a533dfabfbf14f4fd4f9a8adc61;hb=21f850c451cb7db8a0085ddcc892290ecac859eb;hp=37da32f1af1e9ad99086da3faae060b54d4673ae;hpb=bce9a74e8addd1085b2e751508bf9ab0c2e84e45;p=awesomized%2Flibmemcached diff --git a/libtest/timer.hpp b/libtest/timer.hpp index 37da32f1..eac51940 100644 --- a/libtest/timer.hpp +++ b/libtest/timer.hpp @@ -36,13 +36,15 @@ #pragma once +#include #include -#include +#include #ifdef __MACH__ # include # include #else +# include # include #endif @@ -72,11 +74,34 @@ public: _time(_end); } + void offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds) + { + reset(); + _end= _begin; + _end.tv_sec+= (minutes_arg * 60) +seconds_arg; + _end.tv_nsec+= nanoseconds; + } + + int64_t minutes() + { + struct timespec result; + difference(result); + return int64_t(result.tv_sec / 60); + } + + uint64_t elapsed_milliseconds() const + { + struct timespec temp; + difference(temp); + + return temp.tv_sec*1000 +temp.tv_nsec/1000000; + } + void difference(struct timespec& arg) const { if ((_end.tv_nsec -_begin.tv_nsec) < 0) { - arg.tv_sec= _end.tv_sec -_begin.tv_sec-1; + arg.tv_sec= _end.tv_sec -_begin.tv_sec -1; arg.tv_nsec= 1000000000 +_end.tv_nsec -_begin.tv_nsec; } @@ -98,8 +123,24 @@ private: mach_port_deallocate(mach_task_self(), _clock_serv); ts.tv_sec= _mach_timespec.tv_sec; ts.tv_nsec= _mach_timespec.tv_nsec; +#elif defined(HAVE_CLOCK_GETTIME) && HAVE_CLOCK_GETTIME + int ret; + do + { + ret= clock_gettime(CLOCK_REALTIME, &ts); + } while (ret == -1); +#elif defined(HAVE_GETTIMEOFDAY) && HAVE_GETTIMEOFDAY + struct timeval tv; + int ret; + do + { + ret= gettimeofday(&tv, NULL) + } while (ret == -1); + /* Convert from timeval to timespec */ + ts.tv_sec= tv.tv_sec; + ts.tv_nsec= tv.tv_usec * 1000; #else - clock_gettime(CLOCK_REALTIME, &ts); + memset(&ts, 0, sizeof(struct timespec)); #endif }