diff options
Diffstat (limited to 'cpp/src/qpid/sys/posix/Time.cpp')
-rw-r--r-- | cpp/src/qpid/sys/posix/Time.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/cpp/src/qpid/sys/posix/Time.cpp b/cpp/src/qpid/sys/posix/Time.cpp index 8aa9fd9946..d8d0a58d2e 100644 --- a/cpp/src/qpid/sys/posix/Time.cpp +++ b/cpp/src/qpid/sys/posix/Time.cpp @@ -26,18 +26,39 @@ #include <time.h> #include <stdio.h> #include <sys/time.h> +#include <unistd.h> + +namespace { +int64_t max_abstime() { return std::numeric_limits<int64_t>::max(); } +} namespace qpid { namespace sys { +AbsTime::AbsTime(const AbsTime& t, const Duration& d) : + timepoint(d == Duration::max() ? max_abstime() : t.timepoint+d.nanosecs) +{} + +AbsTime AbsTime::FarFuture() { + AbsTime ff; ff.timepoint = max_abstime(); return ff; +} + AbsTime AbsTime::now() { struct timespec ts; ::clock_gettime(CLOCK_REALTIME, &ts); AbsTime time_now; - time_now.time_ns = toTime(ts).nanosecs; + time_now.timepoint = toTime(ts).nanosecs; return time_now; } +Duration::Duration(const AbsTime& time0) : + nanosecs(time0.timepoint) +{} + +Duration::Duration(const AbsTime& start, const AbsTime& finish) : + nanosecs(finish.timepoint - start.timepoint) +{} + struct timespec& toTimespec(struct timespec& ts, const Duration& t) { ts.tv_sec = t / TIME_SEC; ts.tv_nsec = t % TIME_SEC; @@ -63,7 +84,7 @@ std::ostream& operator<<(std::ostream& o, const AbsTime& t) { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" }; struct tm * timeinfo; - time_t rawtime(t.time_ns/TIME_SEC); + time_t rawtime(t.timepoint/TIME_SEC); timeinfo = localtime (&rawtime); char time_string[100]; sprintf ( time_string, @@ -78,5 +99,12 @@ std::ostream& operator<<(std::ostream& o, const AbsTime& t) { return o << time_string; } -}} +void sleep(int secs) { + ::sleep(secs); +} +void usleep(uint64_t usecs) { + ::usleep(usecs); +} + +}} |