diff --git a/lib/statistics/GwStatistics.h b/lib/statistics/GwStatistics.h index fc84f45..6db9151 100644 --- a/lib/statistics/GwStatistics.h +++ b/lib/statistics/GwStatistics.h @@ -38,28 +38,42 @@ class TimeAverage{ }; class TimeMonitor{ - public: TimeAverage **times=NULL; - unsigned long *current=NULL; - unsigned long start=0; + struct timeval *current=NULL; + struct timeval start; unsigned long lastLog=0; unsigned long lastLogCount=0; unsigned long count=0; unsigned long max=0; size_t len; + unsigned long tdiff(struct timeval &tnew,struct timeval &told){ + time_t sdiff=tnew.tv_sec-told.tv_sec; + time_t udiff=0; + if (tnew.tv_usec < told.tv_usec){ + if (sdiff > 0) { + sdiff--; + udiff=tnew.tv_usec+1000000UL-told.tv_usec; + } + } + else{ + udiff=tnew.tv_usec-told.tv_usec; + } + return sdiff * 1000000UL +udiff; + } + public: TimeMonitor(size_t len,double factor=0.3){ this->len=len; times=new TimeAverage*[len]; for (size_t i=0;i= len) return; - unsigned long sv=start; + struct timeval *sv=&start; for (size_t i=0;i max) max=now-start; + gettimeofday(¤t[index],NULL); + unsigned long currentv=tdiff(current[index],*sv); + unsigned long startDiff=tdiff(current[index],start); + if (startDiff > max) max=startDiff; times[index-1]->add(currentv); } };