diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-08-30 16:15:46 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-08-30 16:15:46 +0200 |
commit | 90679336bd9c0abddfdcfc037b58a3fbe8299fbf (patch) | |
tree | 578692481f64bf0f1b1d76351b395dfbcf52a708 /cpp/src/IceUtil/Timer.cpp | |
parent | bug 2424: check for null in Java hashCode method (diff) | |
download | ice-90679336bd9c0abddfdcfc037b58a3fbe8299fbf.tar.bz2 ice-90679336bd9c0abddfdcfc037b58a3fbe8299fbf.tar.xz ice-90679336bd9c0abddfdcfc037b58a3fbe8299fbf.zip |
Squashed commit of the following:
commit a61fce80c95ed97d9716648c2083c8581326e950
Author: Benoit Foucher <benoit@zeroc.com>
Date: Thu Aug 30 15:33:54 2007 +0200
Added optimization to not wakeup too often
commit d44134e724e43aeb1db8693a37a5b611f295948c
Author: Benoit Foucher <benoit@zeroc.com>
Date: Thu Aug 30 11:34:22 2007 +0200
Changed the connection monitor to use the timer.
commit 915f0669599a457f46974c3a108205d5c3c666ba
Author: Benoit Foucher <benoit@zeroc.com>
Date: Wed Aug 29 16:18:59 2007 +0200
Fixed IceGrid and casino demo to use IceUtil::Timer
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rwxr-xr-x | cpp/src/IceUtil/Timer.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp index 4c287efcf90..24f08a28193 100755 --- a/cpp/src/IceUtil/Timer.cpp +++ b/cpp/src/IceUtil/Timer.cpp @@ -64,7 +64,7 @@ Timer::schedule(const TimerTaskPtr& task, const IceUtil::Time& time) } _tokens.insert(token); - if(token.scheduledTime <= _tokens.begin()->scheduledTime) + if(_wakeUpTime == IceUtil::Time() || token.scheduledTime < _wakeUpTime) { _monitor.notify(); } @@ -95,7 +95,7 @@ Timer::scheduleRepeated(const TimerTaskPtr& task, const IceUtil::Time& delay) } _tokens.insert(token); - if(token.scheduledTime <= _tokens.begin()->scheduledTime) + if(_wakeUpTime == IceUtil::Time() || token.scheduledTime < _wakeUpTime) { _monitor.notify(); } @@ -118,6 +118,7 @@ Timer::cancel(const TimerTaskPtr& task) #else Token token = { p->second, IceUtil::Time(), p->first }; #endif + _tokens.erase(token); _tasks.erase(p); return true; @@ -152,6 +153,7 @@ Timer::run() if(_tokens.empty()) { + _wakeUpTime = IceUtil::Time(); _monitor.wait(); } } @@ -175,7 +177,8 @@ Timer::run() } break; } - + + _wakeUpTime = first.scheduledTime; _monitor.timedWait(first.scheduledTime - now); } |