diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-08-31 17:01:34 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-08-31 17:01:34 +0200 |
commit | 31efb365dfed25a2fdbe2e38178f7989cbfe00f4 (patch) | |
tree | acf3bb92d51ae74ab897119d9334283db08c66aa /cpp/src/IceUtil/Timer.cpp | |
parent | bug 2441 - Do not require IceBoc.ServiceManager.Endpoints to be set (diff) | |
download | ice-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-x | cpp/src/IceUtil/Timer.cpp | 45 |
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()) { |