X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Futil%2Ftimeutils.h;h=d7c0fe25a0a0dad06ffd41b6d69b5f1a4be84e85;hb=d9de2aae6b2f47b8e1faacc69adba7406b9d85f0;hp=367c80bbbc3c1db707046e2efec38f4d1a3f9b6d;hpb=960f33c651b2dd1e6331dafe5b21705c11cee1a2;p=deb_libcec.git diff --git a/src/lib/platform/util/timeutils.h b/src/lib/platform/util/timeutils.h index 367c80b..d7c0fe2 100644 --- a/src/lib/platform/util/timeutils.h +++ b/src/lib/platform/util/timeutils.h @@ -2,7 +2,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -31,7 +31,8 @@ * http://www.pulse-eight.net/ */ -#include "../os.h" +#include "env.h" +#include "lib/platform/os.h" #if defined(__APPLE__) #include @@ -39,6 +40,7 @@ #elif defined(__WINDOWS__) #include #else +#include #include #endif @@ -78,23 +80,20 @@ namespace PLATFORM inline int64_t GetTimeMs() { #if defined(__APPLE__) - return (int64_t) (CVGetCurrentHostTime() * 1000 / CVGetHostClockFrequency()); + return (int64_t) (CVGetCurrentHostTime() / (int64_t)(CVGetHostClockFrequency() * 0.001)); #elif defined(__WINDOWS__) - time_t rawtime; - time(&rawtime); - LARGE_INTEGER tickPerSecond; LARGE_INTEGER tick; if (QueryPerformanceFrequency(&tickPerSecond)) { QueryPerformanceCounter(&tick); - return (int64_t) (tick.QuadPart / 1000.); + return (int64_t) (tick.QuadPart / (tickPerSecond.QuadPart / 1000.)); } return -1; #else - timeval time; - gettimeofday(&time, NULL); - return (int64_t) (time.tv_sec * 1000 + time.tv_usec / 1000); + timespec time; + clock_gettime(CLOCK_MONOTONIC, &time); + return (int64_t)time.tv_sec * 1000 + time.tv_nsec / 1000000; #endif } @@ -107,13 +106,16 @@ namespace PLATFORM class CTimeout { public: - CTimeout(uint32_t iTime) : - m_iTarget(GetTimeMs() + iTime) {} + CTimeout(void) : m_iTarget(0) {} + CTimeout(uint32_t iTimeout) { Init(iTimeout); } + + bool IsSet(void) const { return m_iTarget > 0; } + void Init(uint32_t iTimeout) { m_iTarget = GetTimeMs() + iTimeout; } - uint64_t TimeLeft(void) const + uint32_t TimeLeft(void) const { uint64_t iNow = GetTimeMs(); - return (iNow > m_iTarget) ? 0 : m_iTarget - iNow; + return (iNow > m_iTarget) ? 0 : (uint32_t)(m_iTarget - iNow); } private: