#include <ace/Timer_Queue_T.h>
template<class TYPE, class FUNCTOR, class ACE_LOCK> class ACE_Timer_Queue_T {
public:typedef ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> ITERATOR;ACE_Timer_Queue_T ( FUNCTOR *upcall_functor = 0, ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0 );virtual ~ACE_Timer_Queue_T (void);virtual int is_empty (void) const = 0;virtual const ACE_Time_Value &earliest_time (void) const = 0;virtual long schedule ( const TYPE &type, const void *act, const ACE_Time_Value &delay, const ACE_Time_Value &interval = ACE_Time_Value::zero ) = 0;virtual int reset_interval ( long timer_id, const ACE_Time_Value &interval ) = 0;virtual int cancel ( const TYPE &type, int dont_call_handle_close = 1 ) = 0;virtual int cancel ( long timer_id, const void **act = 0, int dont_call_handle_close = 1 ) = 0;virtual int expire (const ACE_Time_Value ¤t_time);int expire (void);ACE_Time_Value gettimeofday (void);void gettimeofday (ACE_Time_Value (*gettimeofday)(void));virtual ACE_Time_Value *calculate_timeout (ACE_Time_Value *max);virtual ACE_Time_Value *calculate_timeout ( ACE_Time_Value *max, ACE_Time_Value *the_timeout );void timer_skew (const ACE_Time_Value &skew);const ACE_Time_Value &timer_skew (void) const;ACE_LOCK &mutex (void);FUNCTOR &upcall_functor (void);virtual ITERATOR &iter (void) = 0;virtual ACE_Timer_Node_T<TYPE> *remove_first (void) = 0;virtual void dump (void) const;virtual ACE_Timer_Node_T<TYPE> *get_first (void) = 0;virtual void return_node (ACE_Timer_Node_T<TYPE> *);protected:void upcall ( TYPE &type, const void *act, const ACE_Time_Value &cur_time );virtual void reschedule (ACE_Timer_Node_T<TYPE> *) = 0;virtual ACE_Timer_Node_T<TYPE> *alloc_node (void);virtual void free_node (ACE_Timer_Node_T<TYPE> *);ACE_LOCK mutex_;ACE_Free_List<ACE_Timer_Node_T<TYPE> > *free_list_;ACE_Time_Value (*gettimeofday_)(void);FUNCTOR *upcall_functor_;int delete_upcall_functor_;int delete_free_list_;private:ACE_Time_Value timeout_;ACE_Time_Value timer_skew_;inline ACE_UNIMPLEMENTED_FUNC ( ACE_Timer_Queue_T (const ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> &) );};
ACE_Timer_List
and ACE_Timer_Heap.
ACE_Timer_Queue_T (
FUNCTOR *upcall_functor = 0,
ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
);
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. freelist the freelist of
timer nodes. If 0, then a default freelist will be created.
virtual ~ACE_Timer_Queue_T (void);
virtual int is_empty (void) const = 0;
virtual const ACE_Time_Value &earliest_time (void) const = 0;
virtual long schedule (
const TYPE &type,
const void *act,
const ACE_Time_Value &delay,
const ACE_Time_Value &interval = ACE_Time_Value::zero
) = 0;
type that will expire after delay amount of time,
which is specified in absolute 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, using relative time to the current gettimeofday.
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 reset_interval (
long timer_id,
const ACE_Time_Value &interval
) = 0;
timer_id to
interval, which is specified in relative time to the current
gettimeofday. If interval is equal to
ACE_Time_Value::zero, the timer will become a non-rescheduling
timer. Returns 0 if successful, -1 if not.
virtual int cancel (
const TYPE &type,
int dont_call_handle_close = 1
) = 0;
type. If
dont_call_handle_close is 0 then the functor will be invoked,
which typically invokes the handle_close hook. Returns number
of timers cancelled.
virtual int cancel (
long timer_id,
const void **act = 0,
int dont_call_handle_close = 1
) = 0;
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_handle_close is 0 then the functor will be invoked,
which typically calls the handle_close hook. Returns 1 if
cancellation succeeded and 0 if the timer_id wasn't found.
virtual int expire (const ACE_Time_Value ¤t_time);
functor for all timers whose values are = cur_time.
This does not account for timer_skew. Returns the number of
timers canceled.
int expire (void);
functor for all timers whose values are =
ACE_OS::gettimeofday. Also accounts for timer_skew. Returns
the number of timers canceled.
ACE_Time_Value gettimeofday (void);
void gettimeofday (ACE_Time_Value (*gettimeofday)(void));
virtual ACE_Time_Value *calculate_timeout (ACE_Time_Value *max);
max if there are
no pending timers or if all pending timers are longer than max.
virtual ACE_Time_Value *calculate_timeout (
ACE_Time_Value *max,
ACE_Time_Value *the_timeout
);
max if there are
no pending timers or if all pending timers are longer than max.
the_timeout should be a pointer to storage for the timeout value,
and this value is also returned.
void timer_skew (const ACE_Time_Value &skew);
const ACE_Time_Value &timer_skew (void) const;
ACE_LOCK &mutex (void);
FUNCTOR &upcall_functor (void);
virtual ITERATOR &iter (void) = 0;
ACE_Timer_Queue's iterator.
virtual ACE_Timer_Node_T<TYPE> *remove_first (void) = 0;
virtual void dump (void) const;
virtual ACE_Timer_Node_T<TYPE> *get_first (void) = 0;
virtual void return_node (ACE_Timer_Node_T<TYPE> *);
remove_first.
inline ACE_UNIMPLEMENTED_FUNC (
ACE_Timer_Queue_T (const ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> &)
);