#include <ace/Timer_Wheel.h>
template<class TYPE, class FUNCTOR, class ACE_LOCK> class ACE_Timer_Wheel_T : public ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> {
public:
typedef ACE_Timer_Wheel_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> WHEEL_ITERATOR;friend class ACE_Timer_Wheel_Iterator_T<TYPE, FUNCTOR, ACE_LOCK>;
typedef ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> INHERITED;
ACE_Timer_Wheel_T ( size_t wheelsize, size_t resolution, size_t prealloc = 0, FUNCTOR *upcall_functor = 0, ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0 );
ACE_Timer_Wheel_T ( FUNCTOR *upcall_functor = 0, ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0 );
virtual ~ACE_Timer_Wheel_T (void);
virtual int is_empty (void) const;
virtual const ACE_Time_Value &earliest_time (void) const;
virtual long schedule ( const TYPE &type, const void *act, const ACE_Time_Value &delay, const ACE_Time_Value &interval = ACE_Time_Value::zero );
virtual int cancel ( const TYPE &type, int dont_call_handle_close = 1 );
virtual int cancel ( long timer_id, const void **act = 0, int dont_call_handle_close = 1 );
virtual int expire (void);
int expire (const ACE_Time_Value &);
virtual ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> &iter ( void );
virtual ACE_Timer_Node_T<TYPE> *remove_first (void);
virtual void dump (void) const;
virtual ACE_Timer_Node_T<TYPE> *get_first (void);
private:
virtual void reschedule (ACE_Timer_Node_T<TYPE> *);
ACE_Timer_Node_T<TYPE> **wheel_;
size_t wheel_size_;
size_t resolution_;
size_t earliest_pos_;
long size_;
WHEEL_ITERATOR *iterator_;
ACE_Timer_Node_T<TYPE> *freelist_;
inline ACE_UNIMPLEMENTED_FUNC ( ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T<TYPE, FUNCTOR, ACE_LOCK> &) );
};
ACE_Timer_Wheel_T (
size_t wheelsize,
size_t resolution,
size_t prealloc = 0,
FUNCTOR *upcall_functor = 0,
ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
);
wheelsize
- size of the timing wheel,
resolution
- resolution of time values the hashing function uses,
and upcall_functor
- a functor that will be used instead of creating
a default functor. Also, when the freelist is created, prealloc
nodes
will be allocated. This can also take in a upcall functor and freelist
(if 0, then defaults will be created)
ACE_Timer_Wheel_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. The
defaults will be used for size and resolution and no preallocation
(ACE_DEFAULT_TIMER_WHEEL_SIZE, ACE_DEFAULT_TIMER_WHEEL_RESOLUTION)
virtual ~ACE_Timer_Wheel_T (void);
virtual int is_empty (void) const;
virtual const ACE_Time_Value &earliest_time (void) const;
ACE_Timer_Wheel
.
virtual long schedule (
const TYPE &type,
const void *act,
const ACE_Time_Value &delay,
const ACE_Time_Value &interval = ACE_Time_Value::zero
);
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 timer.
This timer_id
can be used to cancel the timer before it expires.
Returns -1 on failure.
virtual int cancel (const TYPE &type, int dont_call_handle_close = 1);
type
. If dont_call
is 0
then the functor
will be invoked. Returns number of timers
cancelled.
virtual int cancel (
long timer_id,
const void **act = 0,
int dont_call_handle_close = 1
);
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 (void);
functor
for all timers whose values are =
ACE_OS::gettimeofday
. Also accounts for timer_skew
. Returns
the number of timers canceled.
int expire (const ACE_Time_Value &);
functor
for all timers whose values are = cur_time
.
This does not account for timer_skew
. Returns the number of
timers canceled.
virtual ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> &iter (
void
);
ACE_Timer_Queue_T
's iterator.
virtual ACE_Timer_Node_T<TYPE> *remove_first (void);
virtual void dump (void) const;
virtual ACE_Timer_Node_T<TYPE> *get_first (void);
inline ACE_UNIMPLEMENTED_FUNC (
ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T<TYPE, FUNCTOR, ACE_LOCK> &)
);
brunsch@cs.wustl.edu