std::vector<SlotProxy> slots;
Semaphore sem;
Mutex mutex;
+ bool blocking;
public:
+ Timer();
~Timer();
- /**
- Adds a timer that will be executed periodically as long as the timeout
- signal hander returns true.
- */
+ /** 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.
- */
+ /** 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.
- */
+ /** Cancels a previously added timer. */
void cancel(Slot &);
- /**
- Checks all timers, executing any that have timed out. If block is true,
- waits until one times out.
+ /** Deprecated. Use one of the other overloads. */
+ void tick(bool block);
- Note: If there are no active timers when a blocking tick is executed, it
- won't return until a timer is added from another thread.
- */
- void tick(bool block = true);
+ /** 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;
};