X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Ftimer.hpp;h=73de26c6ac2361168cdf7974180cd32d4fa3c5e1;hb=77c9719d429337239b3f5e3d7fc5c17492682a77;hp=37da32f1af1e9ad99086da3faae060b54d4673ae;hpb=f363012dbad70fe0d1e6d714f432e1567cef4935;p=m6w6%2Flibmemcached diff --git a/libtest/timer.hpp b/libtest/timer.hpp index 37da32f1..73de26c6 100644 --- a/libtest/timer.hpp +++ b/libtest/timer.hpp @@ -36,8 +36,9 @@ #pragma once +#include #include -#include +#include #ifdef __MACH__ # include @@ -72,11 +73,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; } @@ -90,7 +114,9 @@ public: private: void _time(struct timespec& ts) { -#ifdef __MACH__ // OSX lacks clock_gettime() +#if defined(HAVE_CLOCK_GETTIME) && HAVE_CLOCK_GETTIME + clock_gettime(CLOCK_REALTIME, &ts); +#elif defined(__MACH__) && __MACH__ // OSX lacks clock_gettime() clock_serv_t _clock_serv; mach_timespec_t _mach_timespec; host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv); @@ -99,7 +125,6 @@ private: ts.tv_sec= _mach_timespec.tv_sec; ts.tv_nsec= _mach_timespec.tv_nsec; #else - clock_gettime(CLOCK_REALTIME, &ts); #endif }