]>
Dogcows Code - chaz/openbox/blob - otk/timer.hh
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
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 TimerQueueManager
;
22 //! The data passed to the TimeoutHandler 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 *TimeoutData
;
28 //! The type of function which can be set as the callback for a Timer firing
29 typedef void (*TimeoutHandler
)(TimeoutData
);
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 TimerQueueManager
*_manager
;
36 //! The function to call when the time elapses
37 TimeoutHandler _handler
;
38 //! The data which gets passed along to the TimeoutHandler
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 Timer objects
52 //! Disallows copying of Timer objects
53 Timer
& operator=(const Timer
&);
56 //! Constructs a new Timer object
58 @param m The TimerQueueManager 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 Timer(TimerQueueManager
*m
, TimeoutHandler h
, TimeoutData d
);
64 //! Destroys the Timer object
67 //! Fires the timer, calling its TimeoutHandler
70 //! Returns if the Timer is started and timing
71 inline bool timing() const { return _timing
; }
72 //! Returns if the Timer is going to repeat
73 inline bool recurring() const { return _recur
; }
75 //! Gets the amount of time the Timer should last before firing
76 inline const timeval
&timeout() const { return _timeout
; }
77 //! Gets the time at which the Timer started
78 inline const timeval
&startTime() const { return _start
; }
80 //! Gets the amount of time left before the Timer fires
81 timeval
remainingTime(const timeval
&tm
) const;
82 //! Returns if the Timer is past its timeout time, and should fire
83 bool shouldFire(const timeval
&tm
) const;
85 //! Gets the time at which the Timer will fire
86 timeval
endTime() const;
88 //! Sets the Timer 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 Timer 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 Timer 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 Timer::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 Timer will fire before a second Timer object
123 @param other The second Timer with which to compare
124 @return true if this Timer will fire before 'other'; otherwise, false
126 bool operator<(const Timer
& other
) const
127 { return shouldFire(other
.endTime()); }
This page took 0.043885 seconds and 4 git commands to generate.