ACE 8.0.0
|
Provides an interface to timers. More...
#include <Timer_Queue_T.h>
Public Types | |
typedef TIME_POLICY | time_policy_t |
Type of time policy. | |
![]() | |
typedef ACE_Timer_Queue_Iterator_T< TYPE > | ITERATOR |
Type of Iterator. | |
Protected Member Functions | |
virtual long | schedule_i (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval)=0 |
Schedule a timer. | |
virtual void | reschedule (ACE_Timer_Node_T< TYPE > *)=0 |
Reschedule an "interval" ACE_Timer_Node. | |
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 ¤t_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 | |
ACE_LOCK | mutex_ |
ACE_Free_List< ACE_Timer_Node_T< TYPE > > * | free_list_ |
Class that implements a free list. | |
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_> | |
![]() | |
FUNCTOR * | upcall_functor_ |
Upcall functor. | |
bool const | delete_upcall_functor_ |
To delete or not to delete is the question? | |
Private Attributes | |
ACE_Time_Value | timeout_ |
Returned by <calculate_timeout>. | |
ACE_Time_Value | timer_skew_ |
Adjusts for timer skew in various clocks. | |
Provides an interface to timers.
This is an abstract base class that provides hook for implementing specialized policies such as ACE_Timer_List and ACE_Timer_Heap.
typedef TIME_POLICY ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::time_policy_t |
Type of time policy.
ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::ACE_Timer_Queue_T | ( | FUNCTOR * | upcall_functor = 0, |
ACE_Free_List< ACE_Timer_Node_T< TYPE > > * | freelist = 0, | ||
TIME_POLICY const & | time_policy = TIME_POLICY() ) |
Default constructor. 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.
|
virtual |
Destructor - make virtual for proper destruction of inherited classes.
|
protectedvirtual |
Factory method that allocates a new node.
Reimplemented in ACE_Timer_Heap_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
Determine the next event to timeout. Returns max if there are no pending timers or if all pending timers are longer than max. This method acquires a lock internally since it modifies internal state. Implement calculate_timeout() using the right locking policy
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
virtual |
Determine the next event to timeout. Returns max if there are no pending timers or if all pending timers are longer than max. the_timeout should be a pointer to storage for the timeout value, and this value is also returned. This method does not acquire a lock internally since it doesn't modify internal state. If you need to call this method when the queue is being modified concurrently, however, you should make sure to acquire the <mutex()> externally before making the call.
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
virtual |
Return the current time, using the right time policy and any timer skew defined in derived classes.
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
virtual |
Get the dispatch information for a timer whose value is <= current_time. This does not account for <timer_skew>. Returns 1 if there is a node whose value <= current_time else returns a 0.
|
protectedvirtual |
Non-locking version of dispatch_info ()
Reimplemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >.
|
virtual |
Dump the state of a object.
Implements ACE_Abstract_Timer_Queue< TYPE >.
Reimplemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >, ACE_Timer_Heap_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >, ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >, and ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
Run the <functor> for all timers whose values are <= <ACE_OS::gettimeofday>. Also accounts for <timer_skew>.
Depending on the resolution of the underlying OS the system calls like select()/poll() might return at time different than that is specified in the timeout. Suppose the OS guarantees a resolution of t ms. The timeline will look like
A B | | V V
|----------—|----------—|----------—|----------—| t t t t t
If you specify a timeout value of A, then the timeout will not occur at A but at the next interval of the timer, which is later than that is expected. Similarly, if your timeout value is equal to B, then the timeout will occur at interval after B. Now depending upon the resolution of your timeouts and the accuracy of the timeouts needed for your application, you should set the value of <timer_skew>. In the above case, if you want the timeout A to fire no later than A, then you should specify your <timer_skew> to be A % t.
The timeout value should be specified via the macro ACE_TIMER_SKEW in your config.h file. The default value is zero.
Things get interesting if the t before the timeout value B is zero i.e your timeout is less than the interval. In that case, you are almost sure of not getting the desired timeout behaviour. Maybe you should look for a better OS :-)
Returns the number of timers canceled.
Implements ACE_Abstract_Timer_Queue< TYPE >.
Reimplemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >, and ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
Implement ACE_Abstract_Timer_Queue<TYPE>::expire () with the right locking strategy.
Implements ACE_Abstract_Timer_Queue< TYPE >.
Reimplemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >, and ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
A couple of classes using Timer_Queues need to dispatch a single event at a time. But before they dispatch the event they need to release a lock, signal other threads, etc.
This member function should be used in that case. The additional operations to be called just before dispatching the event, and only if an event will be dispatched, are encapsulated in the ACE_Command_Base object.
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
protectedvirtual |
Factory method that frees a previously allocated node.
Reimplemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >, and ACE_Timer_Heap_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
Implement the gettimeofday() virtual function
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
virtual |
Allows applications to control how the timer queue gets the time of day.
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
inline |
Implement an inlined, non-abstract version of gettimeofday(), through this member function the internals of the class can make calls to ACE_OS::gettimeofday() with zero overhead.
ACE_LOCK & ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >::mutex | ( | ) |
Synchronization variable used by the queue.
|
inline |
This method will call the postinvoke() on <functor>.
|
inline |
This method will call the preinvoke() on <functor>.
|
protected |
Recompute when the next time is that this interval timer should fire.
|
protectedpure virtual |
Reschedule an "interval" ACE_Timer_Node.
Implemented in ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >, ACE_Timer_Heap_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >, ACE_Timer_List_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >, and ACE_Timer_Wheel_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.
|
virtual |
Method used to return a timer node to the queue's ownership after it is returned by a method like <remove_first>.
|
virtual |
Implement ACE_Abstract_Timer_Queue<TYPE>::schedule () with the right locking strategy.
Implements ACE_Abstract_Timer_Queue< TYPE >.
|
protectedpure virtual |
|
inline |
Allows applications to control how the timer queue gets the time of day.
|
inline |
Get the timer skew for the Timer_Queue.
|
inline |
Set the timer skew for the Timer_Queue.
|
inline |
This method will call the timeout() on <functor>.
|
protected |
Flag to delete only if the class created the <free_list_>
|
protected |
Class that implements a free list.
|
protected |
Synchronization variable for ACE_Timer_Queue.
|
protected |
The policy to return the current time of day.
|
private |
Returned by <calculate_timeout>.
|
private |
Adjusts for timer skew in various clocks.