NAME

ACE_Timer_Heap

SYNOPSIS

#include <ace/Timer_Heap.h>

class ACE_Timer_Heap : public ACE_Timer_Queue { public: friend class ACE_Timer_Heap_Iterator; ACE_Timer_Heap ( size_t size = ACE_DEFAULT_TIMERS, int preallocated = 0 ); virtual ~ACE_Timer_Heap (void); virtual int is_empty (void) const; virtual const ACE_Time_Value &earliest_time (void) const; virtual int schedule ( ACE_Event_Handler *event_handler, const void *arg, const ACE_Time_Value &delay, const ACE_Time_Value &interval = ACE_Time_Value::zero ); virtual int cancel (ACE_Event_Handler *event_handler); virtual int cancel (int timer_id, const void **arg = 0); virtual void dump (void) const; protected: virtual void reschedule (ACE_Timer_Node *); virtual ACE_Timer_Queue_Iterator &iter (void); virtual ACE_Timer_Node *alloc_node (void); virtual void free_node (ACE_Timer_Node *); private: ACE_Timer_Node *remove (size_t index); void insert (ACE_Timer_Node *new_node); void grow_heap (void); void reheap_up (ACE_Timer_Node *new_node); void reheap_down (ACE_Timer_Node *moved_node, size_t child_index); int timer_id (void); int pop_freelist (void); void push_freelist (int old_id); size_t max_size_; size_t cur_size_; ACE_Timer_Heap_Iterator iterator_; ACE_Timer_Node **heap_; int *timer_ids_; int timer_ids_freelist_; ACE_Timer_Node *preallocated_nodes_; ACE_Timer_Node *preallocated_nodes_freelist_; ACE_Unbounded_Set<ACE_Timer_Node *> preallocated_node_set_; ACE_Timer_Heap (const ACE_Timer_Heap &); void operator= (const ACE_Timer_Heap &); };

DESCRIPTION

This implementation uses a heap-based callout queue of absolute times. Therefore, in the average and worst case, scheduling, canceling, and expiring ACE_Event_Handler timers is O(log N) (where N is the total number of timers). In addition, we can also preallocate as many ACE_Timer_Nodes as there are slots in the heap. This allows us to completely remove the need for dynamic memory allocation, which is important for real-time systems.

Initialization and termination methods.

ACE_Timer_Heap (
    size_t size = ACE_DEFAULT_TIMERS,
    int preallocated = 0
    );

virtual ~ACE_Timer_Heap (void);

virtual int is_empty (void) const;

virtual const ACE_Time_Value &earliest_time (void) const;

virtual int schedule (
    ACE_Event_Handler *event_handler,
    const void *arg,
    const ACE_Time_Value &delay,
    const ACE_Time_Value &interval = ACE_Time_Value::zero
    );

virtual int cancel (ACE_Event_Handler *event_handler);

virtual int cancel (int timer_id, const void **arg = 0);

virtual void dump (void) const;

Don't allow these operations for now.

ACE_Timer_Heap (const ACE_Timer_Heap &);

void operator= (const ACE_Timer_Heap &);

AUTHOR

Doug Schmidt

TITLE

Provides a very fast and predictable timer implementation.

LIBRARY

ace