From 3c790d28dfe7290e91e6ea61bf535287995aeb56 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 4 Mar 2013 16:11:37 +0000 Subject: [PATCH] bug fix --- src/server.cpp | 23 +++++++++++++++-------- src/server.h | 2 +- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index ef3df519..f95234a4 100755 --- a/src/server.cpp +++ b/src/server.cpp @@ -118,8 +118,7 @@ CHighPrecisionTimer::CHighPrecisionTimer() : (uint64_t) timeBaseInfo.numer; #else // set delay - Delay.tv_sec = 0; - Delay.tv_nsec = iNsDelay; + Delay = iNsDelay; #endif } @@ -133,12 +132,16 @@ void CHighPrecisionTimer::Start() // set initial end time #if defined ( __APPLE__ ) || defined ( __MACOSX ) - NextEnd = mach_absolute_time(); - NextEnd += Delay; + NextEnd = mach_absolute_time() + Delay; #else clock_gettime ( CLOCK_MONOTONIC, &NextEnd ); - NextEnd.tv_sec += Delay.tv_sec; - NextEnd.tv_nsec += Delay.tv_nsec; + + NextEnd.tv_nsec += Delay; + if ( NextEnd.tv_nsec >= 1000000000L ) + { + NextEnd.tv_sec++; + NextEnd.tv_nsec -= 1000000000L; + } #endif // start thread @@ -176,8 +179,12 @@ void CHighPrecisionTimer::run() &NextEnd, NULL ); - NextEnd.tv_sec += Delay.tv_sec; - NextEnd.tv_nsec += Delay.tv_nsec; + NextEnd.tv_nsec += Delay; + if ( NextEnd.tv_nsec >= 1000000000L ) + { + NextEnd.tv_sec++; + NextEnd.tv_nsec -= 1000000000L; + } #endif } } diff --git a/src/server.h b/src/server.h index 6033cdc0..c36bfb7a 100755 --- a/src/server.h +++ b/src/server.h @@ -100,7 +100,7 @@ protected: uint64_t Delay; uint64_t NextEnd; #else - timespec Delay; + long Delay; timespec NextEnd; #endif