1 #ifndef MSP_TIME_TIMER_H_
2 #define MSP_TIME_TIMER_H_
5 #include <sigc++/sigc++.h>
6 #include <msp/core/attributes.h>
7 #include <msp/core/mutex.h>
8 #include <msp/core/noncopyable.h>
9 #include <msp/core/semaphore.h>
10 #include "timedelta.h"
11 #include "timestamp.h"
17 A class for executing functions in a deferred or periodical fashion. The add a
18 timer, use one of the add functions and connect a functor to the timeout signal
21 This class is thread-safe, to allow running timers in a separate thread.
23 class Timer: private NonCopyable
29 sigc::signal<bool> signal_timeout;
36 Slot(const TimeDelta &);
37 Slot(const TimeStamp &);
38 const TimeStamp &get_timeout() const { return timeout; }
48 bool operator<(const SlotProxy &) const;
51 std::vector<SlotProxy> slots;
60 /** Adds a timer that will be executed periodically as long as the timeout
61 signal hander returns true. */
62 Slot &add(const TimeDelta &);
64 /** Adds a timer that will be executed once at a specific time. The return
65 value of the timeout signal handler is ignored. */
66 Slot &add(const TimeStamp &);
68 /** Cancels a previously added timer. */
71 /** Deprecated. Use one of the other overloads. */
72 DEPRECATED void tick(bool block);
74 /** Waits until a timer expires, then executes it. If no timers have been
75 set, blocks until one is added from another thread. */
78 /** Waits until a timer expires but at most the specified amount of time.
79 If a timer did expire before the timeout, it is executed. */
80 void tick(const TimeDelta &);
83 void do_tick(const TimeDelta &);
86 TimeStamp get_next_timeout() const;