From d711369f12b65969cfb8ad2478996c849922bc4a Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Thu, 12 Jul 2012 14:17:51 +0200 Subject: [PATCH] Correctly handling remainders when using eoTimer. --- eo/src/utils/eoTimer.h | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/eo/src/utils/eoTimer.h b/eo/src/utils/eoTimer.h index edecce62..21131377 100644 --- a/eo/src/utils/eoTimer.h +++ b/eo/src/utils/eoTimer.h @@ -83,15 +83,22 @@ class eoTimer { struct rusage _now; getrusage( RUSAGE_SELF, &_now ); + long int result = _now.ru_utime.tv_sec - _start.ru_utime.tv_sec; - if( _now.ru_utime.tv_sec == _start.ru_utime.tv_sec ) + long int remainder = _now.ru_utime.tv_usec - _start.ru_utime.tv_usec; + if( remainder >= 0 ) { - uuremainder += _now.ru_utime.tv_usec - _start.ru_utime.tv_usec; - if( uuremainder > 1000000) - { - ++result; - uuremainder -= 1000000; - } + uuremainder += remainder; + } else + { + uuremainder += ( 1000000 - remainder ); + --result; + } + + if( uuremainder >= 1000000 ) + { + uuremainder -= 1000000; + ++result; } return result; } @@ -109,15 +116,22 @@ class eoTimer { struct rusage _now; getrusage( RUSAGE_SELF, &_now ); + long int result = _now.ru_stime.tv_sec - _start.ru_stime.tv_sec; - if( _now.ru_stime.tv_sec == _start.ru_stime.tv_sec ) + long int remainder = _now.ru_stime.tv_usec - _start.ru_stime.tv_usec; + if( remainder >= 0 ) { - usremainder += _now.ru_stime.tv_usec - _start.ru_stime.tv_usec; - if( usremainder > 1000000) - { - ++result; - usremainder -= 1000000; - } + usremainder += remainder; + } else + { + usremainder += ( 1000000 - remainder ); + --result; + } + + if( usremainder >= 1000000 ) + { + usremainder -= 1000000; + ++result; } return result; }