NAME

ACE_Timer_Wheel_T - Provides a Timing Wheel version of Timer Queue

SYNOPSIS

#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 reset_interval ( long timer_id, const ACE_Time_Value &interval ); 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> &) ); };

DESCRIPTION

This implementation uses a hash table of ordered doubly- linked lists of absolute times. The other enhancements to Timer List include using the pointer to the node as the timer id (to speed up removing), adding a free list and the ability to preallocate nodes. Timer Wheel is based on the timing wheel implementation used in Adam M. Costello and George Varghese's paper "Redesigning the BSD Callout and Timer Facilities" (http://dworkin.wustl.edu/~varghese/PAPERS/newbsd.ps.Z)

Initialization and termination methods

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 reset_interval (
    long timer_id,
    const ACE_Time_Value &interval
    );

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

Don't allow these operations for now.

inline ACE_UNIMPLEMENTED_FUNC (
    ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T<TYPE, FUNCTOR, ACE_LOCK> &)
    );

AUTHOR

Darrell Brunsch brunsch@cs.wustl.edu

LIBRARY

ace