소스 검색

Fixed rounding error in DownloadEngine::run().

This fixes the bug that executeCommand() with Command::STATUS_ALL is
not called in every interval correctly because of rounding error in
timer.
Tatsuhiro Tsujikawa 14 년 전
부모
커밋
59f251ba14
1개의 변경된 파일8개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 1
      src/DownloadEngine.cc

+ 8 - 1
src/DownloadEngine.cc

@@ -141,6 +141,13 @@ void executeCommand(std::deque<Command*>& commands,
 }
 } // namespace
 
+namespace {
+
+// Rounding error in millis
+const int A2_DELTA = 10;
+
+} // namespace
+
 void DownloadEngine::run()
 {
   Timer cp;
@@ -148,7 +155,7 @@ void DownloadEngine::run()
   while(!commands_.empty() || !routineCommands_.empty()) {
     global::wallclock.reset();
     calculateStatistics();
-    if(cp.differenceInMillis(global::wallclock) >= refreshInterval_) {
+    if(cp.differenceInMillis(global::wallclock) >= refreshInterval_-A2_DELTA) {
       refreshInterval_ = DEFAULT_REFRESH_INTERVAL;
       cp = global::wallclock;
       executeCommand(commands_, Command::STATUS_ALL);