diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/IceUtil/Timer.h | 7 | ||||
-rwxr-xr-x | cpp/src/IceUtil/Timer.cpp | 45 |
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()) { |