diff --git a/StopWatch.cpp b/StopWatch.cpp index 06a95a6..915bda1 100644 --- a/StopWatch.cpp +++ b/StopWatch.cpp @@ -21,8 +21,8 @@ #if defined(_WIN32) || defined(_WIN64) CStopWatch::CStopWatch() : -m_frequencyMS(), m_frequencyS(), +m_frequencyMS(), m_start() { ::QueryPerformanceFrequency(&m_frequencyS); @@ -63,6 +63,7 @@ unsigned int CStopWatch::elapsed() #else #include +#include CStopWatch::CStopWatch() : m_start() @@ -83,21 +84,19 @@ unsigned long long CStopWatch::time() const unsigned long CStopWatch::start() { - ::gettimeofday(&m_start, NULL); + ::clock_gettime(CLOCK_MONOTONIC, &m_start); - return m_start.tv_usec; + return m_start.tv_sec * 1000UL + m_start.tv_nsec / 1000000UL; } unsigned int CStopWatch::elapsed() { - struct timeval now; - ::gettimeofday(&now, NULL); + struct timespec now; + ::clock_gettime(CLOCK_MONOTONIC, &now); - unsigned int elapsed = (now.tv_sec - m_start.tv_sec) * 1000U; - elapsed += now.tv_usec / 1000U; - elapsed -= m_start.tv_usec / 1000U; + int offset = ((now.tv_sec - m_start.tv_sec) * 1000000000UL + now.tv_nsec - m_start.tv_nsec ) / 1000000UL; - return elapsed; + return (unsigned int)offset; } #endif diff --git a/StopWatch.h b/StopWatch.h index 3822f0b..8958b25 100644 --- a/StopWatch.h +++ b/StopWatch.h @@ -42,7 +42,7 @@ private: LARGE_INTEGER m_frequencyMS; LARGE_INTEGER m_start; #else - struct timeval m_start; + struct timespec m_start; #endif };