- static ThreadProxy thread;
- static Mutex set_mutex;
- static std::set<Timer *> timers;
+public:
+ Timer();
+ ~Timer();
+
+ /** Adds a timer that will be executed periodically as long as the timeout
+ signal hander returns true. */
+ Slot &add(const TimeDelta &);
+
+ /** Adds a timer that will be executed once at a specific time. The return
+ value of the timeout signal handler is ignored. */
+ Slot &add(const TimeStamp &);
+
+ /** Cancels a previously added timer. */
+ void cancel(Slot &);
+
+ /** Waits until a timer expires, then executes it. If no timers have been
+ set, blocks until one is added from another thread. */
+ void tick();
+
+ /** Waits until a timer expires but at most the specified amount of time.
+ If a timer did expire before the timeout, it is executed. */
+ void tick(const TimeDelta &);
+
+private:
+ void do_tick(const TimeDelta &);
+
+public:
+ TimeStamp get_next_timeout() const;