Correctly handling remainders when using eoTimer.

This commit is contained in:
Benjamin Bouvier 2012-07-12 14:17:51 +02:00
commit d711369f12

View file

@ -83,15 +83,22 @@ class eoTimer
{ {
struct rusage _now; struct rusage _now;
getrusage( RUSAGE_SELF, &_now ); getrusage( RUSAGE_SELF, &_now );
long int result = _now.ru_utime.tv_sec - _start.ru_utime.tv_sec; 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; uuremainder += remainder;
if( uuremainder > 1000000) } else
{ {
++result; uuremainder += ( 1000000 - remainder );
uuremainder -= 1000000; --result;
} }
if( uuremainder >= 1000000 )
{
uuremainder -= 1000000;
++result;
} }
return result; return result;
} }
@ -109,15 +116,22 @@ class eoTimer
{ {
struct rusage _now; struct rusage _now;
getrusage( RUSAGE_SELF, &_now ); getrusage( RUSAGE_SELF, &_now );
long int result = _now.ru_stime.tv_sec - _start.ru_stime.tv_sec; 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; usremainder += remainder;
if( usremainder > 1000000) } else
{ {
++result; usremainder += ( 1000000 - remainder );
usremainder -= 1000000; --result;
} }
if( usremainder >= 1000000 )
{
usremainder -= 1000000;
++result;
} }
return result; return result;
} }