summaryrefslogtreecommitdiff
path: root/ACE/examples/APG/Timers/PTimerDispatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/APG/Timers/PTimerDispatcher.cpp')
-rw-r--r--ACE/examples/APG/Timers/PTimerDispatcher.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/ACE/examples/APG/Timers/PTimerDispatcher.cpp b/ACE/examples/APG/Timers/PTimerDispatcher.cpp
new file mode 100644
index 00000000000..405c5771789
--- /dev/null
+++ b/ACE/examples/APG/Timers/PTimerDispatcher.cpp
@@ -0,0 +1,69 @@
+// $Id$
+
+#include "PTimerDispatcher.h"
+
+void PTimer_Dispatcher::wait_for_event (void)
+{
+ ACE_TRACE (ACE_TEXT ("PTimer_Dispatcher::wait_for_event"));
+
+ while (1)
+ {
+ ACE_Time_Value max_tv = timer_queue_->gettimeofday ();
+
+ ACE_Time_Value *this_timeout =
+ this->timer_queue_->calculate_timeout (&max_tv);
+
+ if (*this_timeout == ACE_Time_Value::zero)
+ this->timer_queue_->expire ();
+ else
+ {
+ // Convert to absolute time.
+ ACE_Time_Value next_timeout =
+ timer_queue_->gettimeofday ();
+ next_timeout += *this_timeout;
+ if (this->timer_.wait (&next_timeout) == -1 )
+ this->timer_queue_->expire ();
+ }
+ }
+}
+
+long
+PTimer_Dispatcher::schedule (PCB *cb,
+ void *arg,
+ const ACE_Time_Value &abs_time,
+ const ACE_Time_Value &interval)
+{
+ ACE_TRACE (ACE_TEXT ("PTimer_Dispatcher::schedule_timer"));
+
+ return this->timer_queue_->schedule
+ (cb, arg, abs_time, interval);
+}
+
+int
+PTimer_Dispatcher::cancel (PCB *cb,
+ int dont_call_handle_close)
+{
+ ACE_TRACE (ACE_TEXT ("PTimer_Dispatcher::cancel"));
+ return timer_queue_->cancel (cb, dont_call_handle_close);
+}
+
+void PTimer_Dispatcher::set (PTimerQueue *timer_queue)
+{
+ ACE_TRACE (ACE_TEXT ("PTimer_Dispatcher::set"));
+
+ timer_queue_ = timer_queue;
+}
+
+int
+PTimer_Dispatcher::reset_interval (long timer_id,
+ const ACE_Time_Value &interval)
+{
+ ACE_TRACE (ACE_TEXT ("PTimer_Dispatcher::reset_interval"));
+
+ return timer_queue_->reset_interval (timer_id, interval);
+}
+
+#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
+template ACE_Singleton<PTimer_Dispatcher, ACE_Null_Mutex> *
+ ACE_Singleton<PTimer_Dispatcher, ACE_Null_Mutex>::singleton_;
+# endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */