ACE 8.0.5
Loading...
Searching...
No Matches
ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY > Class Template Reference

Provides a simple implementation of timers. More...

#include <Timer_List_T.h>

Inheritance diagram for ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >:
Collaboration diagram for ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >:

Public Types

typedef ACE_Timer_List_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY > Iterator
 Type of iterator.
typedef ACE_Timer_Node_T< TYPE > Node
typedef ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY > Base_Timer_Queue
 Type inherited from.
typedef ACE_Free_List< NodeFreeList
Public Types inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >
typedef ACE_Default_Time_Policy time_policy_t
 Type of time policy.
Public Types inherited from ACE_Abstract_Timer_Queue< TYPE >
typedef ACE_Timer_Queue_Iterator_T< TYPE > ITERATOR
 Type of Iterator.

Public Member Functions

 ACE_Timer_List_T (FUNCTOR *upcall_functor=0, FreeList *freelist=0, TIME_POLICY const &time_policy=TIME_POLICY())
virtual ~ACE_Timer_List_T ()
 Destructor.
virtual bool is_empty () const
 True if queue is empty, else false.
virtual const ACE_Time_Valueearliest_time () const
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 close ()
virtual ACE_Timer_Queue_Iterator_T< TYPE > & iter ()
 Returns a pointer to this ACE_Timer_Queue's iterator.
virtual ACE_Timer_Node_T< TYPE > * remove_first ()
 Removes the earliest node from the queue and returns it.
virtual void dump () const
 Dump the state of an object.
virtual void reschedule (ACE_Timer_Node_T< TYPE > *)
 Reschedule an "interval" ACE_Timer_Node_T. This should be private but for now it needs to be public for <ACE_Timer_Hash_T>.
virtual ACE_Timer_Node_T< TYPE > * get_first ()
 Reads the earliest node from the queue and returns it.
Public Member Functions inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >
 ACE_Timer_Queue_T (FUNCTOR *upcall_functor=0, ACE_Free_List< ACE_Timer_Node_T< TYPE > > *freelist=0, ACE_Default_Time_Policy const &time_policy=ACE_Default_Time_Policy())
virtual ~ACE_Timer_Queue_T ()
virtual long schedule (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval=ACE_Time_Value::zero)
virtual int expire (const ACE_Time_Value &current_time)
virtual int expire_single (ACE_Command_Base &pre_dispatch_command)
virtual int dispatch_info (const ACE_Time_Value &current_time, ACE_Timer_Node_Dispatch_Info_T< TYPE > &info)
virtual ACE_Time_Value gettimeofday ()
ACE_Time_Value gettimeofday_static ()
void set_time_policy (ACE_Default_Time_Policy const &time_policy)
virtual ACE_Time_Valuecalculate_timeout (ACE_Time_Value *max)
virtual ACE_Time_Value current_time ()
void timer_skew (const ACE_Time_Value &skew)
 Set the timer skew for the Timer_Queue.
ACE_LOCK & mutex ()
 Synchronization variable used by the queue.
virtual void return_node (ACE_Timer_Node_T< TYPE > *)
void preinvoke (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time, const void *&upcall_act)
 This method will call the preinvoke() on <functor>.
void upcall (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time)
 This method will call the timeout() on <functor>.
void postinvoke (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time, const void *upcall_act)
 This method will call the postinvoke() on <functor>.
Public Member Functions inherited from ACE_Timer_Queue_Upcall_Base< TYPE, FUNCTOR >
 ACE_Timer_Queue_Upcall_Base (FUNCTOR *upcall_functor=nullptr)
 ACE_Timer_Queue_Upcall_Base (const ACE_Timer_Queue_Upcall_Base &)=delete
 ACE_Timer_Queue_Upcall_Base (ACE_Timer_Queue_Upcall_Base &&)=delete
ACE_Timer_Queue_Upcall_Baseoperator= (const ACE_Timer_Queue_Upcall_Base &)=delete
ACE_Timer_Queue_Upcall_Baseoperator= (ACE_Timer_Queue_Upcall_Base &&)=delete
virtual ~ACE_Timer_Queue_Upcall_Base ()
 Destructor.
FUNCTOR & upcall_functor ()
 Accessor to the upcall functor.
Public Member Functions inherited from ACE_Abstract_Timer_Queue< TYPE >
virtual ~ACE_Abstract_Timer_Queue ()=0
 Destructor.
virtual int expire ()=0
virtual void gettimeofday (ACE_Time_Value(*gettimeofday)())=0
virtual ACE_Time_Valuecalculate_timeout (ACE_Time_Value *max, ACE_Time_Value *the_timeout)=0

Private Member Functions

virtual long schedule_i (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval)
void schedule_i (ACE_Timer_Node_T< TYPE > *n, const ACE_Time_Value &exp)
 The shared scheduling functionality between schedule() and reschedule().
ACE_Timer_Node_T< TYPE > * find_node (long timer_id) const
void cancel_i (ACE_Timer_Node_T< TYPE > *n)
 Shared subset of the two cancel() methods.
void unlink (ACE_Timer_Node_T< TYPE > *n)
ACE_Timer_Node_T< TYPE > * get_first_i () const
 ACE_Timer_List_T (const ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK > &)=delete
void operator= (const ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK > &)=delete

Private Attributes

ACE_Timer_Node_T< TYPE > * head_
 Pointer to linked list of <ACE_Timer_Handles>.
Iteratoriterator_
 Iterator used to expire timers.
long id_counter_

Friends

class ACE_Timer_List_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >
 Iterator is a friend.

Additional Inherited Members

Protected Member Functions inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >
virtual ACE_Timer_Node_T< TYPE > * alloc_node ()
 Factory method that allocates a new node.
virtual void free_node (ACE_Timer_Node_T< TYPE > *)
 Factory method that frees a previously allocated node.
virtual int dispatch_info_i (const ACE_Time_Value &current_time, ACE_Timer_Node_Dispatch_Info_T< TYPE > &info)
 Non-locking version of dispatch_info ().
void recompute_next_abs_interval_time (ACE_Timer_Node_T< TYPE > *expired, const ACE_Time_Value &cur_time)
 Recompute when the next time is that this interval timer should fire.
Protected Attributes inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >
ACE_LOCK mutex_
ACE_Free_List< ACE_Timer_Node_T< TYPE > > * free_list_
 Class that implements a free list.
ACE_Default_Time_Policy time_policy_
 The policy to return the current time of day.
bool const delete_free_list_
 Flag to delete only if the class created the <free_list_>.
Protected Attributes inherited from ACE_Timer_Queue_Upcall_Base< TYPE, FUNCTOR >
FUNCTOR * upcall_functor_
 Upcall functor.
bool const delete_upcall_functor_
 To delete or not to delete is the question?

Detailed Description

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
class ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >

Provides a simple implementation of timers.

This implementation uses a linked list of absolute times. Therefore, in the average case, scheduling and canceling timers is O(N) (where N is the total number of timers) and expiring timers is O(K) (where K is the total number of timers that are < the current time of day). More clever implementations could use a delta-list, a heap, or timing wheels, etc. For instance, ACE_Timer_Heap is a subclass of ACE_Timer_List that implements a heap-based callout queue. For most applications, the ACE_Timer_Heap will perform substantially faster than the ACE_Timer_List.

Member Typedef Documentation

◆ Base_Timer_Queue

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY> ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::Base_Timer_Queue

Type inherited from.

◆ FreeList

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Free_List<Node> ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::FreeList

◆ Iterator

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Timer_List_Iterator_T<TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY> ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::Iterator

Type of iterator.

◆ Node

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Timer_Node_T<TYPE> ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::Node

Constructor & Destructor Documentation

◆ ACE_Timer_List_T() [1/2]

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::ACE_Timer_List_T ( FUNCTOR * upcall_functor = 0,
FreeList * freelist = 0,
TIME_POLICY const & time_policy = TIME_POLICY() )

Default constructor. upcall_functor is the instance of the FUNCTOR to be used by the list. If upcall_functor is 0, a default FUNCTOR will be created. freelist is the freelist of timer nodes. If 0, then a default freelist will be created.

◆ ~ACE_Timer_List_T()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::~ACE_Timer_List_T ( )
virtual

Destructor.

◆ ACE_Timer_List_T() [2/2]

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::ACE_Timer_List_T ( const ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK > & )
privatedelete

Member Function Documentation

◆ cancel()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
int ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::cancel ( const TYPE & type,
int dont_call_handle_close = 1 )
virtual

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

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ cancel_i()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::cancel_i ( ACE_Timer_Node_T< TYPE > * n)
private

Shared subset of the two cancel() methods.

◆ close()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
int ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::close ( )
virtual

Cancel the single timer that matches the 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 cancel (long timer_id, const void** act = 0, int dont_call_handle_close = 1);

/** Destroy timer queue. Cancels all timers.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ dump()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::dump ( ) const
virtual

Dump the state of an object.

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >.

◆ earliest_time()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
const ACE_Time_Value & ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::earliest_time ( ) const
virtual

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

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ find_node()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_Node_T< TYPE > * ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::find_node ( long timer_id) const
private

◆ get_first()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_Node_T< TYPE > * ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::get_first ( )
virtual

Reads the earliest node from the queue and returns it.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ get_first_i()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_Node_T< TYPE > * ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::get_first_i ( ) const
private

◆ is_empty()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
bool ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::is_empty ( ) const
virtual

True if queue is empty, else false.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ iter()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_Queue_Iterator_T< TYPE > & ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::iter ( )
virtual

Returns a pointer to this ACE_Timer_Queue's iterator.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ operator=()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::operator= ( const ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK > & )
privatedelete

◆ remove_first()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
ACE_Timer_Node_T< TYPE > * ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::remove_first ( )
virtual

Removes the earliest node from the queue and returns it.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ reschedule()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::reschedule ( ACE_Timer_Node_T< TYPE > * n)
virtual

Reschedule an "interval" ACE_Timer_Node_T. This should be private but for now it needs to be public for <ACE_Timer_Hash_T>.

Implements ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >.

◆ reset_interval()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
int ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::reset_interval ( long timer_id,
const ACE_Time_Value & interval )
virtual

Resets the interval of the timer represented by 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.

Implements ACE_Abstract_Timer_Queue< TYPE >.

◆ schedule_i() [1/2]

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::schedule_i ( ACE_Timer_Node_T< TYPE > * n,
const ACE_Time_Value & exp )
private

The shared scheduling functionality between schedule() and reschedule().

◆ schedule_i() [2/2]

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
long ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::schedule_i ( const TYPE & type,
const void * act,
const ACE_Time_Value & future_time,
const ACE_Time_Value & interval )
privatevirtual

Schedule type that will expire at future_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>).

Implements ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, ACE_Default_Time_Policy >.

◆ unlink()

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY>
void ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::unlink ( ACE_Timer_Node_T< TYPE > * n)
private

◆ ACE_Timer_List_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
friend class ACE_Timer_List_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >
friend

Iterator is a friend.

Member Data Documentation

◆ head_

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
ACE_Timer_Node_T<TYPE>* ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::head_
private

Pointer to linked list of <ACE_Timer_Handles>.

◆ id_counter_

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
long ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::id_counter_
private

Keeps track of the timer id that uniquely identifies each timer. This id can be used to cancel a timer via the <cancel(long)> method.

◆ iterator_

template<class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy>
Iterator* ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::iterator_
private

Iterator used to expire timers.


The documentation for this class was generated from the following files: