summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorKim van der Riet <kpvdr@apache.org>2007-11-05 22:39:27 +0000
committerKim van der Riet <kpvdr@apache.org>2007-11-05 22:39:27 +0000
commita11b6076410330386739f00030046e74063421e9 (patch)
tree1302556017fcccd4fa82b0efc8109125b23aa7c0 /cpp/src
parentb07b0a633be48c74122f5a0cb04eafc57fb6a96b (diff)
downloadqpid-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.cpp8
-rw-r--r--cpp/src/qpid/broker/Timer.h4
-rw-r--r--cpp/src/qpid/sys/Time.h6
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(); }