summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Timer.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-08-31 17:01:34 +0200
committerBenoit Foucher <benoit@zeroc.com>2007-08-31 17:01:34 +0200
commit31efb365dfed25a2fdbe2e38178f7989cbfe00f4 (patch)
treeacf3bb92d51ae74ab897119d9334283db08c66aa /cpp/src/IceUtil/Timer.cpp
parentbug 2441 - Do not require IceBoc.ServiceManager.Endpoints to be set (diff)
downloadice-31efb365dfed25a2fdbe2e38178f7989cbfe00f4.tar.bz2
ice-31efb365dfed25a2fdbe2e38178f7989cbfe00f4.tar.xz
ice-31efb365dfed25a2fdbe2e38178f7989cbfe00f4.zip
Squashed commit of the following:
commit 1d43f88b9f7f1651ac367b217b10da3c9c5e7400 Author: Benoit Foucher <benoit@zeroc.com> Date: Fri Aug 31 16:55:20 2007 +0200 Added C# Timer implementation commit 52c3f88a429f62ed3564ab65c1af1736c2c1d2ee Author: Benoit Foucher <benoit@zeroc.com> Date: Fri Aug 31 14:49:18 2007 +0200 Added Java Timer impl.
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rwxr-xr-xcpp/src/IceUtil/Timer.cpp45
1 files changed, 14 insertions, 31 deletions
diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp
index 24f08a28193..d08a35fea03 100755
--- a/cpp/src/IceUtil/Timer.cpp
+++ b/cpp/src/IceUtil/Timer.cpp
@@ -35,6 +35,7 @@ Timer::destroy()
}
_destroyed = true;
_monitor.notify();
+ _tasks.clear();
_tokens.clear();
}
getThreadControl().join();
@@ -49,22 +50,14 @@ Timer::schedule(const TimerTaskPtr& task, const IceUtil::Time& time)
return;
}
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
- Token token;
- token.scheduledTime = time;
- token.task = task;
-#else
- const Token token = { time, IceUtil::Time(), task };
-#endif
-
- bool inserted = _tasks.insert(make_pair(task, token.scheduledTime)).second;
+ bool inserted = _tasks.insert(make_pair(task, time)).second;
if(!inserted)
{
throw IllegalArgumentException(__FILE__, __LINE__, "task is already schedulded");
}
- _tokens.insert(token);
+ _tokens.insert(Token(time, IceUtil::Time(), task));
- if(_wakeUpTime == IceUtil::Time() || token.scheduledTime < _wakeUpTime)
+ if(_wakeUpTime == IceUtil::Time() || time < _wakeUpTime)
{
_monitor.notify();
}
@@ -79,15 +72,7 @@ Timer::scheduleRepeated(const TimerTaskPtr& task, const IceUtil::Time& delay)
return;
}
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
- Token token;
- token.scheduledTime = IceUtil::Time::now() + delay;
- token.delay = delay;
- token.task = task;
-#else
- Token token = { IceUtil::Time::now() + delay, delay, task };
-#endif
-
+ const Token token(IceUtil::Time::now() + delay, delay, task);
bool inserted = _tasks.insert(make_pair(task, token.scheduledTime)).second;
if(!inserted)
{
@@ -105,29 +90,27 @@ bool
Timer::cancel(const TimerTaskPtr& task)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ if(_destroyed)
+ {
+ return false;
+ }
+
map<TimerTaskPtr, IceUtil::Time>::iterator p = _tasks.find(task);
if(p == _tasks.end())
{
return false;
}
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
- Token token;
- token.scheduledTime = p->second;
- token.task = p->first;
-#else
- Token token = { p->second, IceUtil::Time(), p->first };
-#endif
-
- _tokens.erase(token);
+ _tokens.erase(Token(p->second, IceUtil::Time(), p->first));
_tasks.erase(p);
+
return true;
}
void
Timer::run()
{
- Token token;
+ Token token(IceUtil::Time(), IceUtil::Time(), 0);
while(true)
{
{
@@ -149,7 +132,7 @@ Timer::run()
_tokens.insert(token);
}
}
- token = Token();
+ token = Token(IceUtil::Time(), IceUtil::Time(), 0);
if(_tokens.empty())
{