diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-04-26 18:48:06 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-04-26 18:48:06 +0000 |
commit | 1496689c75876a0b530b5607fb613c69e9e691a0 (patch) | |
tree | 7e7bb5e43b96de401923fd3319b9800d586dd78a /ace/Timer_Queue.h | |
parent | 0ade236d792b248800b2aeefc274e26512ccdfe7 (diff) | |
download | ATCD-1496689c75876a0b530b5607fb613c69e9e691a0.tar.gz |
*** empty log message ***
Diffstat (limited to 'ace/Timer_Queue.h')
-rw-r--r-- | ace/Timer_Queue.h | 288 |
1 files changed, 30 insertions, 258 deletions
diff --git a/ace/Timer_Queue.h b/ace/Timer_Queue.h index e46ce860b17..d67b643df92 100644 --- a/ace/Timer_Queue.h +++ b/ace/Timer_Queue.h @@ -10,279 +10,51 @@ // Timer_Queue.h // // = AUTHOR -// Doug Schmidt -// Irfan Pyarali +// Doug Schmidt and Irfan Pyarali // // ============================================================================ #if !defined (ACE_TIMER_QUEUE_H) #define ACE_TIMER_QUEUE_H -#include "ace/Time_Value.h" -#include "ace/Synch.h" +#include "ace/Timer_Queue_T.h" -// Forward declaration. -template <class TYPE, class FUNCTOR> -class ACE_Timer_Queue_T; - -template <class TYPE, class FUNCTOR> -class ACE_Timer_List_T; - -template <class TYPE, class FUNCTOR> -class ACE_Timer_List_Iterator_T; - -template <class TYPE, class FUNCTOR> -class ACE_Timer_Heap_T; - -template <class TYPE, class FUNCTOR> -class ACE_Timer_Heap_Iterator_T; - -// This should be nested within the ACE_Timer_Queue class but some C++ -// compilers still don't like this... - -template <class TYPE, class FUNCTOR> -class ACE_Timer_Node_T - // = TITLE - // Maintains the state associated with a Timer entry. -{ - // = The use of friends should be replaced with accessors... - friend class ACE_Timer_Queue_T<TYPE, FUNCTOR>; - friend class ACE_Timer_List_T<TYPE, FUNCTOR>; - friend class ACE_Timer_List_Iterator_T<TYPE, FUNCTOR>; - friend class ACE_Timer_Heap_T<TYPE, FUNCTOR>; - friend class ACE_Timer_Heap_Iterator_T<TYPE, FUNCTOR>; - - typedef ACE_Timer_Node_T<TYPE, FUNCTOR> NODE; - // Typedef for self - - // = Initialization methods. - ACE_Timer_Node_T (const TYPE &type, - const void *a, - const ACE_Time_Value &t, - const ACE_Time_Value &i, - NODE *n, - int timer_id); - // Constructor. - - ACE_Timer_Node_T (void); - // Default constructor. - - TYPE type_; - // Type of object stored in the Queue - - const void *act_; - // Act associated with the timer. - - ACE_Time_Value timer_value_; - // Time until the timer expires. - - ACE_Time_Value interval_; - // If this is a periodic timer this holds the time until the next - // timeout. - - NODE *next_; - // Pointer to next timer. - - int timer_id_; - // Id of this timer (used to cancel timers before they expire). - - ACE_ALLOC_HOOK_DECLARE; - // Declare the dynamic allocation hooks. - - void dump (void) const; - // Dump the state of an TYPE. -}; - -template <class TYPE, class FUNCTOR> -class ACE_Timer_Queue_Iterator_T - // = TITLE - // Generic interfae for iterating over a subclass of - // <ACE_Timer_Queue>. +class ACE_Export ACE_Event_Handler_Handle_Timeout_Upcall + // = TITLE + // Functor for Timer_Queues. // // = DESCRIPTION - // This is a special type of iterator that "advances" by moving - // the head of the timer queue up by one every time. + // This class implements the functor required by the Timer + // Queue to call <handle_timeout> on ACE_Event_Handlers. { public: - - typedef ACE_Timer_Node_T<TYPE, FUNCTOR> NODE; - // Type of the Node - - ACE_Timer_Queue_Iterator_T (void); - virtual ~ACE_Timer_Queue_Iterator_T (void); - - virtual int next (NODE *&timer_node, - const ACE_Time_Value &cur_time) = 0; - // Pass back the next <timer_node> that hasn't been seen yet, if its - // <time_value_> <= <cur_time>. In addition, moves the timer queue - // forward by one node. Returns 0 when all <timer_nodes> have been - // seen, else 1. + typedef ACE_Timer_Queue_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall> + TIMER_QUEUE; + + int operator () (TIMER_QUEUE &timer_queue, + ACE_Event_Handler *handler, + const void *arg, + const ACE_Time_Value &cur_time); + // This method is called when the timer expires + + int operator () (TIMER_QUEUE &timer_queue, + ACE_Event_Handler *handler); + // This method is called when the timer is canceled }; -template <class TYPE, class FUNCTOR> -class ACE_Timer_Queue_T - // = TITLE - // Provides an interface to timers. - // - // = DESCRIPTION - // This is an abstract base class that provides hook for - // implementing specialized policies such as <ACE_Timer_List> - // and <ACE_Timer_Heap>. -{ -public: - typedef ACE_Timer_Node_T<TYPE, FUNCTOR> NODE; - // Type of Node - - typedef ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR> ITERATOR; - // Type of Iterator - - // = Initialization and termination methods. - ACE_Timer_Queue_T (FUNCTOR *upcall_functor = 0); - // Default constructor. <upcall_functor> is the instance of the - // FUNCTOR to be used by the queue. If <upcall_functor> is 0, Timer - // Queue will create a default FUNCTOR. - - virtual ~ACE_Timer_Queue_T (void); - // Destructor - make virtual for proper destruction of inherited - // classes. - - virtual int is_empty (void) const = 0; - // True if queue is empty, else false. - - virtual const ACE_Time_Value &earliest_time (void) const = 0; - // Returns the time of the earlier node in the Timer_Queue. - - virtual int schedule (const TYPE &type, - const void *act, - const ACE_Time_Value &delay, - const ACE_Time_Value &interval = ACE_Time_Value::zero) = 0; - // Schedule <type> that will expire after <delay> amount of time. - // If it expires then <act> is passed in as the value to the - // <functor>. If <interval> is != to <ACE_Time_Value::zero> then it - // is used to reschedule the <type> automatically. This method - // returns a <timer_id> that uniquely identifies the the <type> - // entry in an internal list. This <timer_id> can be used to cancel - // the timer before it expires. The cancellation ensures that - // <timer_ids> are unique up to values of greater than 2 billion - // timers. As long as timers don't stay around longer than this - // there should be no problems with accidentally deleting the wrong - // timer. Returns -1 on failure (which is guaranteed never to be a - // valid <timer_id>). - - virtual int cancel (const TYPE &type, - int dont_call_handle_close = 1) = 0; - // Cancel all timer associated with <type>. If <dont_call> is 0 - // then the <functor> will be invoked. Returns number of timers - // cancelled. - - virtual int cancel (int timer_id, - const void **act = 0, - int dont_call_handle_close = 1) = 0; - // Cancel the single timer that matches the <timer_id> value (which - // was returned from the <schedule> method). If act is non-NULL - // then it will be set to point to the ``magic cookie'' argument - // passed in when the timer was registered. This makes it possible - // to free up the memory and avoid memory leaks. If <dont_call> is - // 0 then the <functor> will be invoked. Returns 1 if cancellation - // succeeded and 0 if the <timer_id> wasn't found. - - virtual int expire (const ACE_Time_Value ¤t_time); - // Run the <functor> for all timers whose values are <= <cur_time>. - // This does not account for <timer_skew>. Returns the number of - // timers canceled. - - virtual int expire (void); - // Run the <functor> for all timers whose values are <= - // <ACE_OS::gettimeofday>. Also accounts for <timer_skew>. Returns - // the number of timers canceled. - - virtual ACE_Time_Value gettimeofday (void); - // Returns the current time of day. This allows different - // implementations of the timer queue to use special high resolution - // timers. - - void gettimeofday (ACE_Time_Value (*gettimeofday)(void)); - // Allows applications to control how the timer queue gets the time - // of day. - - virtual ACE_Time_Value *calculate_timeout (ACE_Time_Value *max); - // Determine the next event to timeout. Returns <max> if there are - // no pending timers or if all pending timers are longer than max. - - // = Set/get the timer skew for the Timer_Queue. - void timer_skew (const ACE_Time_Value &skew); - const ACE_Time_Value &timer_skew (void) const; - -#if defined (ACE_MT_SAFE) - ACE_Recursive_Thread_Mutex &lock (void); - // Synchronization variable used by the queue -#endif /* ACE_MT_SAFE */ - - FUNCTOR &upcall_functor (void); - // Accessor to the upcall functor - - virtual void dump (void) const; - // Dump the state of a object. - - ACE_ALLOC_HOOK_DECLARE; - // Declare the dynamic allocation hooks. - -protected: - - virtual void upcall (TYPE &type, - const void *act, - const ACE_Time_Value &cur_time); - // This method will call the <functor> with the <type>, <act> and - // <time> - - virtual void reschedule (NODE *) = 0; - // Reschedule an "interval" <ACE_Timer_Node>. - - virtual ITERATOR &iter (void) = 0; - // Returns a pointer to this <ACE_Timer_Queue>'s iterator. - - virtual NODE *alloc_node (void) = 0; - // Factory method that allocates a new node. - - virtual void free_node (NODE *) = 0; - // Factory method that frees a previously allocated node. - -#if defined (ACE_MT_SAFE) - ACE_Recursive_Thread_Mutex lock_; - // Synchronization variable for the MT_SAFE ACE_Reactor -#endif /* ACE_MT_SAFE */ - - ACE_Time_Value (*gettimeofday_)(void); - // Pointer to function that returns the current time of day. - - FUNCTOR &upcall_functor_; - // Upcall functor - - int delete_upcall_functor_; - // To delete or not to delete is the question? - -private: - ACE_Time_Value timeout_; - // Returned by <calculate_timeout>. - - ACE_Time_Value timer_skew_; - // Adjusts for timer skew in various clocks. - - // = Don't allow these operations for now. - ACE_Timer_Queue_T (const ACE_Timer_Queue_T<TYPE, FUNCTOR> &); - void operator= (const ACE_Timer_Queue_T<TYPE, FUNCTOR> &); -}; +// The following typedef are here for ease of use and backward +// compatibility. -#if defined (__ACE_INLINE__) -#include "ace/Timer_Queue.i" -#endif /* __ACE_INLINE__ */ +typedef ACE_Timer_Node_T<ACE_Event_Handler *, + ACE_Event_Handler_Handle_Timeout_Upcall> + ACE_Timer_Node; -#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) -#include "ace/Timer_Queue.cpp" -#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ +typedef ACE_Timer_Queue_T<ACE_Event_Handler *, + ACE_Event_Handler_Handle_Timeout_Upcall> + ACE_Timer_Queue; -#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) -#pragma implementation ("Timer_Queue.cpp") -#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ +typedef ACE_Timer_Queue_Iterator_T<ACE_Event_Handler *, + ACE_Event_Handler_Handle_Timeout_Upcall> + ACE_Timer_Queue_Iterator; #endif /* ACE_TIMER_QUEUE_H */ |