summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Timer.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-08-30 16:15:46 +0200
committerBenoit Foucher <benoit@zeroc.com>2007-08-30 16:15:46 +0200
commit90679336bd9c0abddfdcfc037b58a3fbe8299fbf (patch)
tree578692481f64bf0f1b1d76351b395dfbcf52a708 /cpp/src/IceUtil/Timer.cpp
parentbug 2424: check for null in Java hashCode method (diff)
downloadice-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-xcpp/src/IceUtil/Timer.cpp9
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);
}