diff options
author | Kim van der Riet <kpvdr@apache.org> | 2007-11-05 22:39:27 +0000 |
---|---|---|
committer | Kim van der Riet <kpvdr@apache.org> | 2007-11-05 22:39:27 +0000 |
commit | a11b6076410330386739f00030046e74063421e9 (patch) | |
tree | 1302556017fcccd4fa82b0efc8109125b23aa7c0 /cpp/src | |
parent | b07b0a633be48c74122f5a0cb04eafc57fb6a96b (diff) | |
download | qpid-python-a11b6076410330386739f00030046e74063421e9.tar.gz |
Added reset function to class AbsTime, thus allowing same instance of TimerTask to be reset and used again for the same duration as initially set
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@592170 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/Timer.cpp | 8 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Timer.h | 4 | ||||
-rw-r--r-- | cpp/src/qpid/sys/Time.h | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/cpp/src/qpid/broker/Timer.cpp b/cpp/src/qpid/broker/Timer.cpp index f721ba5ef5..653e1dffd1 100644 --- a/cpp/src/qpid/broker/Timer.cpp +++ b/cpp/src/qpid/broker/Timer.cpp @@ -27,9 +27,10 @@ using qpid::sys::Monitor; using qpid::sys::Thread; using namespace qpid::broker; -TimerTask::TimerTask(Duration timeout) : time(AbsTime::now(), timeout), cancelled(false) {} -TimerTask::TimerTask(AbsTime _time) : time(_time), cancelled(false) {} +TimerTask::TimerTask(Duration timeout) : duration(timeout), time(AbsTime::now(), timeout), cancelled(false) {} +TimerTask::TimerTask(AbsTime _time) : duration(0), time(_time), cancelled(false) {} TimerTask::~TimerTask(){} +void TimerTask::reset() { time.reset(AbsTime::now(), duration); } Timer::Timer() : active(false) { @@ -82,6 +83,7 @@ void Timer::stop() signalStop(); runner.join(); } + void Timer::signalStop() { Monitor::ScopedLock l(monitor); @@ -110,6 +112,7 @@ TimerA::~TimerA() { stop(); } + void TimerA::run() { Monitor::ScopedLock l(monitor); @@ -157,6 +160,7 @@ void TimerA::stop() signalStop(); runner.join(); } + void TimerA::signalStop() { Monitor::ScopedLock l(monitor); diff --git a/cpp/src/qpid/broker/Timer.h b/cpp/src/qpid/broker/Timer.h index eaa9192bec..aa17525f95 100644 --- a/cpp/src/qpid/broker/Timer.h +++ b/cpp/src/qpid/broker/Timer.h @@ -34,14 +34,16 @@ namespace broker { struct TimerTask { + const qpid::sys::Duration duration; typedef boost::shared_ptr<TimerTask> shared_ptr; - const qpid::sys::AbsTime time; + qpid::sys::AbsTime time; volatile bool cancelled; TimerTask(qpid::sys::Duration timeout); TimerTask(qpid::sys::AbsTime time); virtual ~TimerTask(); + void reset(); virtual void fire() = 0; }; diff --git a/cpp/src/qpid/sys/Time.h b/cpp/src/qpid/sys/Time.h index cff5b70d8e..9c9b3de5c2 100644 --- a/cpp/src/qpid/sys/Time.h +++ b/cpp/src/qpid/sys/Time.h @@ -42,6 +42,7 @@ class AbsTime { inline AbsTime(const AbsTime& time0, const Duration& duration); // Default asignment operation fine // Default copy constructor fine + inline void reset(const AbsTime& time0, const Duration& duration); static AbsTime now(); inline static AbsTime FarFuture(); @@ -68,6 +69,11 @@ AbsTime::AbsTime(const AbsTime& t, const Duration& d) : time_ns(d == Duration::max() ? max() : t.time_ns+d.nanosecs) {} +void AbsTime::reset(const AbsTime& t, const Duration& d) +{ + time_ns = d == Duration::max() ? max() : t.time_ns+d.nanosecs; +} + AbsTime AbsTime::FarFuture() { AbsTime ff; ff.time_ns = max(); return ff;} inline AbsTime now() { return AbsTime::now(); } |