1 // -*- mode: C++; indent-tabs-mode: nil; -*-
6 #ifdef TIME_WITH_SYS_TIME
9 #else // !TIME_WITH_SYS_TIME
10 # ifdef HAVE_SYS_TIME_H
11 # include <sys/time.h>
12 # else // !HAVE_SYS_TIME_H
14 # endif // HAVE_SYS_TIME_H
15 #endif // TIME_WITH_SYS_TIME
20 class OBTimerQueueManager
;
22 //! The data passed to the OBTimeoutHandler function.
24 Note: this is a very useful place to put an object instance, and set the
25 event handler to a static function in the same class.
27 typedef void *OBTimeoutData
;
28 //! The type of function which can be set as the callback for an OBTimer firing
29 typedef void (*OBTimeoutHandler
)(OBTimeoutData
);
31 //! A Timer class which will fire a function when its time elapses
34 //! The manager which to add ourself to and remove ourself after we are done
35 OBTimerQueueManager
*_manager
;
36 //! The function to call when the time elapses
37 OBTimeoutHandler _handler
;
38 //! The data which gets passed along to the OBTimeoutHandler
40 //! Determines if the timer is currently started
42 //! When this is true, the timer will reset itself to fire again every time
45 //! The time at which the timer started
47 //! The time at which the timer is going to fire
50 //! Disallows copying of OBTimer objects
51 OBTimer(const OBTimer
&);
52 //! Disallows copying of OBTimer objects
53 OBTimer
& operator=(const OBTimer
&);
56 //! Constructs a new OBTimer object
58 @param m The OBTimerQueueManager with which to associate. The manager
59 specified will be resposible for making this timer fire.
60 @param h The function to call when the timer fires
61 @param d The data to pass along to the function call when the timer fires
63 OBTimer(OBTimerQueueManager
*m
, OBTimeoutHandler h
, OBTimeoutData d
);
64 //! Destroys the OBTimer object
67 //! Fires the timer, calling its OBTimeoutHandler
70 //! Returns if the OBTimer is started and timing
71 inline bool timing() const { return _timing
; }
72 //! Returns if the OBTimer is going to repeat
73 inline bool recurring() const { return _recur
; }
75 //! Gets the amount of time the OBTimer should last before firing
76 inline const timeval
&timeout() const { return _timeout
; }
77 //! Gets the time at which the OBTimer started
78 inline const timeval
&startTime() const { return _start
; }
80 //! Gets the amount of time left before the OBTimer fires
81 timeval
remainingTime(const timeval
&tm
) const;
82 //! Returns if the OBTimer is past its timeout time, and should fire
83 bool shouldFire(const timeval
&tm
) const;
85 //! Gets the time at which the OBTimer will fire
86 timeval
endTime() const;
88 //! Sets the OBTimer to repeat or not
90 @param b If true, the timer is set to repeat; otherwise, it will fire only
93 inline void setRecurring(bool b
) { _recur
= b
; }
95 //! Sets the amount of time for the OBTimer to last in milliseconds
97 @param t The number of milliseconds the timer should last
99 void setTimeout(long t
);
100 //! Sets the amount of time the OBTimer should last before firing
102 @param t The amount of time the timer should last
104 void setTimeout(const timeval
&t
);
106 //! Causes the timer to begin
108 The timer fires after the time in OBTimer::getTimeout has passed since this
110 Calling this function while the timer is already started will cause it to
111 restart its countdown.
113 void start(); // manager acquires timer
114 //! Causes the timer to stop
116 The timer will no longer fire once this function has been called.
117 Calling this function more than once does not have any effect.
119 void stop(); // manager releases timer
121 //! Determines if this OBTimer will fire before a second OBTimer object
123 @param other The second OBTimer with which to compare
124 @return true if this OBTimer will fire before 'other'; otherwise, false
126 bool operator<(const OBTimer
& other
) const
127 { return shouldFire(other
.endTime()); }