#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> &)
);