summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/IceUtil/Timer.h7
-rwxr-xr-xcpp/src/IceUtil/Timer.cpp45
2 files changed, 21 insertions, 31 deletions
diff --git a/cpp/include/IceUtil/Timer.h b/cpp/include/IceUtil/Timer.h
index b3221d5e47d..fc16baa78c9 100644
--- a/cpp/include/IceUtil/Timer.h
+++ b/cpp/include/IceUtil/Timer.h
@@ -86,6 +86,7 @@ private:
IceUtil::Time delay;
TimerTaskPtr task;
+ inline Token(const IceUtil::Time&, const IceUtil::Time&, const TimerTaskPtr&);
inline bool operator<(const Token& r) const;
};
@@ -99,6 +100,12 @@ private:
};
typedef IceUtil::Handle<Timer> TimerPtr;
+inline
+Timer::Token::Token(const IceUtil::Time& st, const IceUtil::Time& d, const TimerTaskPtr& t) :
+ scheduledTime(st), delay(d), task(t)
+{
+}
+
inline bool
Timer::Token::operator<(const Timer::Token& r) const
{
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())
{