summaryrefslogtreecommitdiff
path: root/ACE/examples/APG/Timers/TimerDispatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/APG/Timers/TimerDispatcher.cpp')
-rw-r--r--ACE/examples/APG/Timers/TimerDispatcher.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/ACE/examples/APG/Timers/TimerDispatcher.cpp b/ACE/examples/APG/Timers/TimerDispatcher.cpp
new file mode 100644
index 00000000000..818d762b738
--- /dev/null
+++ b/ACE/examples/APG/Timers/TimerDispatcher.cpp
@@ -0,0 +1,73 @@
+// $Id$
+
+#include "TimerDispatcher.h"
+// Listing 1 code/ch20
+void Timer_Dispatcher::wait_for_event (void)
+{
+ ACE_TRACE (ACE_TEXT ("Timer_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 ();
+ }
+ }
+}
+// Listing 1
+// Listing 2 code/ch20
+long
+Timer_Dispatcher::schedule (ACE_Event_Handler *cb,
+ void *arg,
+ const ACE_Time_Value &abs_time,
+ const ACE_Time_Value &interval)
+{
+ ACE_TRACE (ACE_TEXT ("Timer_Dispatcher::schedule_timer"));
+
+ return this->timer_queue_->schedule
+ (cb, arg, abs_time, interval);
+}
+// Listing 2
+// Listing 3 code/ch20
+int
+Timer_Dispatcher::cancel (ACE_Event_Handler *cb,
+ int dont_call_handle_close)
+{
+ ACE_TRACE (ACE_TEXT ("Timer_Dispatcher::cancel"));
+ return timer_queue_->cancel (cb, dont_call_handle_close);
+}
+// Listing 3
+// Listing 4 code/ch20
+void Timer_Dispatcher::set (ACE_Timer_Queue *timer_queue)
+{
+ ACE_TRACE (ACE_TEXT ("Timer_Dispatcher::set"));
+
+ timer_queue_ = timer_queue;
+}
+// Listing 4
+
+int
+Timer_Dispatcher::reset_interval (long timer_id,
+ const ACE_Time_Value &interval)
+{
+ ACE_TRACE (ACE_TEXT ("Timer_Dispatcher::reset_interval"));
+
+ return timer_queue_->reset_interval(timer_id, interval);
+}
+
+#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
+template ACE_Singleton<Timer_Dispatcher, ACE_Null_Mutex> *
+ ACE_Singleton<Timer_Dispatcher, ACE_Null_Mutex>::singleton_;
+# endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */