Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

ACE_Timer_Wheel_T Class Template Reference

Provides a Timing Wheel version of Timer Queue. More...

#include <Timer_Wheel_T.h>

Inheritance diagram for ACE_Timer_Wheel_T:

Inheritance graph
[legend]
Collaboration diagram for ACE_Timer_Wheel_T:

Collaboration graph
[legend]
List of all members.

Public Types

typedef ACE_Timer_Wheel_Iterator_T<
TYPE, FUNCTOR, ACE_LOCK > 
WHEEL_ITERATOR
 Type of iterator. More...

typedef ACE_Timer_Queue_T<
TYPE, FUNCTOR, ACE_LOCK > 
INHERITED
 Type inherited from. More...


Public Methods

 ACE_Timer_Wheel_T (FUNCTOR *upcall_functor=0, ACE_Free_List< ACE_Timer_Node_T< TYPE > > *freelist=0)
 Default constructor. More...

 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)
 Constructor with opportunities to set the wheelsize and resolution. More...

virtual ~ACE_Timer_Wheel_T (void)
 Destructor. More...

virtual int is_empty (void) const
 True if queue is empty, else false. More...

virtual const ACE_Time_Valueearliest_time (void) const
 Returns the time of the earlier node in the <ACE_Timer_Wheel>. Must be called on a non-empty queue. More...

virtual long schedule (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval=ACE_Time_Value::zero)
 Schedules a timer. More...

virtual int reset_interval (long timer_id, const ACE_Time_Value &interval)
 Changes the interval of a timer (and can make it periodic or non periodic by setting it to ACE_Time_Value::zero or not). More...

virtual int cancel (const TYPE &type, int dont_call_handle_close=1)
 Cancel all timer associated with <type>. If <dont_call> is 0 then the <functor> will be invoked. Returns number of timers cancelled. More...

virtual int cancel (long timer_id, const void **act=0, int dont_call_handle_close=1)
 Cancels the single timer that is specified by the timer_id. More...

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. More...

int expire (const ACE_Time_Value &)
 This is a specialized version of expire that is more suited for the internal data representation. More...

virtual ACE_Timer_Queue_Iterator_T<
TYPE, FUNCTOR, ACE_LOCK > & 
iter (void)
 Returns a pointer to this <ACE_Timer_Queue_T>'s iterator. More...

virtual ACE_Timer_Node_T<
TYPE > * 
remove_first (void)
 Removes the earliest node from the queue and returns it. More...

virtual void dump (void) const
 Dump the state of an object. More...

virtual ACE_Timer_Node_T<
TYPE > * 
get_first (void)
 Reads the earliest node from the queue and returns it. More...


Private Methods

virtual void reschedule (ACE_Timer_Node_T< TYPE > *)
 Reschedule an "interval" node. More...

 ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK > &)
void operator= (const ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK > &)

Private Attributes

ACE_Timer_Node_T< TYPE > ** wheel_
 Timing Wheel. More...

size_t wheel_size_
 Size of the timing wheel. More...

size_t resolution_
 Resolution (in microsoconds) of the timing wheel. More...

size_t earliest_pos_
 Index of the list with the earliest time. More...

long size_
 Keeps track of the size of the queue. More...

WHEEL_ITERATORiterator_
 Iterator used to expire timers. More...

ACE_Timer_Node_T< TYPE > * freelist_
 Pointer to the freelist of <ACE_Timer_Node_T<TYPE>>. More...


Friends

class ACE_Timer_Wheel_Iterator_T< TYPE, FUNCTOR, ACE_LOCK >
 Iterator is a friend. More...


Detailed Description

template<class TYPE, class FUNCTOR, class ACE_LOCK>
class ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >

Provides a Timing Wheel version of Timer Queue.

This implementation uses a hash table of ordered doubly- linked lists of absolute times. The enhancements to the <ACE_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)


Member Typedef Documentation

template<class TYPE, class FUNCTOR, class ACE_LOCK>
typedef ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> ACE_Timer_Wheel_T::INHERITED
 

Type inherited from.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
typedef ACE_Timer_Wheel_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> ACE_Timer_Wheel_T::WHEEL_ITERATOR
 

Type of iterator.


Constructor & Destructor Documentation

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::ACE_Timer_Wheel_T FUNCTOR *    upcall_functor = 0,
ACE_Free_List< ACE_Timer_Node_T< TYPE > > *    freelist = 0
 

Default constructor.

Parameters:
upcall_functor  A pointer to a functor to use instead of the default
freelist  A pointer to a freelist to use instead of the default

template<class TYPE, class FUNCTOR, class ACE_LOCK>
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
 

Constructor with opportunities to set the wheelsize and resolution.

Parameters:
wheelsize  The number of lists in the timer wheel
resolution  The time resolution used by the hashing function
prealloc  The number of entries to prealloc in the free_list
upcall_functor  A pointer to a functor to use instead of the default
freelist  A pointer to a freelist to use instead of the default

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::~ACE_Timer_Wheel_T void    [virtual]
 

Destructor.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::ACE_Timer_Wheel_T const ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK > &    [private]
 


Member Function Documentation

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::cancel long    timer_id,
const void **    act = 0,
int    skip_close = 1
[virtual]
 

Cancels the single timer that is specified by the timer_id.

In this case the timer_id is actually a pointer to the node, so we cast it to the node. This can be dangerous if the timer_id is made up (or deleted twice) so we do a little sanity check. Finally we update the earliest time in case the earliest timer was removed.

Parameters:
timer_id  Timer Identifier
act  Asychronous Completion Token (AKA magic cookie): If this is non-zero, stores the magic cookie of the cancelled timer here.
skip_close  If this non-zero, the cancellation method of the functor will not be called.
Returns:
1 for sucess and 0 if the timer_id wasn't found (or was found to be invalid)

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::cancel const TYPE &    type,
int    skip_close = 1
[virtual]
 

Cancel all timer associated with <type>. If <dont_call> is 0 then the <functor> will be invoked. Returns number of timers cancelled.

At the end make sure we reset the earliest time value in case the earliest timers were removed.

Parameters:
type  The value to search for.
skip_close  If this non-zero, the cancellation method of the functor will not be called for each cancelled timer.
Returns:
Number of timers cancelled

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
void ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::dump void    const [virtual]
 

Dump the state of an object.

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
const ACE_Time_Value & ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::earliest_time void    const [virtual]
 

Returns the time of the earlier node in the <ACE_Timer_Wheel>. Must be called on a non-empty queue.

Returns:
First (earliest) node in the wheel_'s earliest_pos_ list

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::expire const ACE_Time_Value   cur_time [virtual]
 

This is a specialized version of expire that is more suited for the internal data representation.

Notice that we are still expiring timers in order, even though this can be really speeded up if we didn't worry about this.

Parameters:
cur_time  The time to expire timers up to.
Returns:
Number of timers expired

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::expire void    [virtual]
 

Run the <functor> for all timers whose values are <= <ACE_OS::gettimeofday>. Also accounts for <timer_skew>. Returns the number of timers canceled.

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Node_T< TYPE > * ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::get_first void    [virtual]
 

Reads the earliest node from the queue and returns it.

Returns:
The earliest timer node.

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::is_empty void    const [virtual]
 

True if queue is empty, else false.

Returns:
True if empty

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Queue_Iterator_T< TYPE, FUNCTOR, ACE_LOCK > & ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::iter void    [virtual]
 

Returns a pointer to this <ACE_Timer_Queue_T>'s iterator.

Returns:
The iterator

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
void ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::operator= const ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK > &    [private]
 

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Node_T< TYPE > * ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::remove_first void    [virtual]
 

Removes the earliest node from the queue and returns it.

Returns:
The earliest timer node.

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
void ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::reschedule ACE_Timer_Node_T< TYPE > *    expired [private, virtual]
 

Reschedule an "interval" node.

Also makes sure to update the earliest time.

Parameters:
expired  The timer node to reschedule

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
int ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::reset_interval long    timer_id,
const ACE_Time_Value   interval
[virtual]
 

Changes the interval of a timer (and can make it periodic or non periodic by setting it to ACE_Time_Value::zero or not).

Then use set_interval() on the node to update the interval.

Parameters:
timer_id  The timer identifier
interval  The new interval
Returns:
0 if successful, -1 if no.

Reimplemented from ACE_Timer_Queue_T.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
long ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK >::schedule const TYPE &    type,
const void *    act,
const ACE_Time_Value   future_time,
const ACE_Time_Value   interval = ACE_Time_Value::zero
[virtual]
 

Schedules a timer.

Then inserts the node into the wheel using reschedule (). Then returns a timer_id (which is actually a pointer to the actual timer_node).

Parameters:
type  The data of the timer node
act  Asynchronous Completion Token (AKA magic cookie)
future_time  The time the timer is scheduled for (in absolute time)
interval  If not ACE_Time_Value::zero, then this is a periodic timer and interval is the time period
Returns:
Unique identifier (can be used to cancel the timer). -1 on failure.

Reimplemented from ACE_Timer_Queue_T.


Friends And Related Function Documentation

template<class TYPE, class FUNCTOR, class ACE_LOCK>
friend class ACE_Timer_Wheel_Iterator_T< TYPE, FUNCTOR, ACE_LOCK > [friend]
 

Iterator is a friend.


Member Data Documentation

template<class TYPE, class FUNCTOR, class ACE_LOCK>
size_t ACE_Timer_Wheel_T::earliest_pos_ [private]
 

Index of the list with the earliest time.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Node_T<TYPE>* ACE_Timer_Wheel_T::freelist_ [private]
 

Pointer to the freelist of <ACE_Timer_Node_T<TYPE>>.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
WHEEL_ITERATOR* ACE_Timer_Wheel_T::iterator_ [private]
 

Iterator used to expire timers.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
size_t ACE_Timer_Wheel_T::resolution_ [private]
 

Resolution (in microsoconds) of the timing wheel.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
long ACE_Timer_Wheel_T::size_ [private]
 

Keeps track of the size of the queue.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
ACE_Timer_Node_T<TYPE>** ACE_Timer_Wheel_T::wheel_ [private]
 

Timing Wheel.

template<class TYPE, class FUNCTOR, class ACE_LOCK>
size_t ACE_Timer_Wheel_T::wheel_size_ [private]
 

Size of the timing wheel.


The documentation for this class was generated from the following files:
Generated on Tue Aug 20 15:28:43 2002 for ACE by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001