]> git.tdb.fi Git - libs/core.git/blobdiff - source/time/timer.h
Make sure all classes have sensible copy semantics
[libs/core.git] / source / time / timer.h
index 935df0323debc6c25dbb6e1bb8f62c54f12d67db..575599fa6bb92eb16abeeced1f1147bb32cdaa8f 100644 (file)
@@ -1,17 +1,11 @@
-/* $Id$
-
-This file is part of libmspcore     
-Copyright © 2006  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_TIME_TIMER_H_
 #define MSP_TIME_TIMER_H_
 
-#include <set>
+#include <vector>
 #include <sigc++/sigc++.h>
-#include "../core/mutex.h"
-#include "../core/semaphore.h"
+#include <msp/core/mutex.h>
+#include <msp/core/noncopyable.h>
+#include <msp/core/semaphore.h>
 #include "timedelta.h"
 #include "timestamp.h"
 
@@ -25,7 +19,7 @@ of the returned slot.
 
 This class is thread-safe, to allow running timers in a separate thread.
 */
-class Timer
+class Timer: private NonCopyable
 {
 public:
        class Slot
@@ -53,39 +47,41 @@ private:
                bool operator<(const SlotProxy &) const;
        };
 
-       std::set<SlotProxy> slots;
+       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);
+
+       /** Waits until a timer expires, then executes it.  If no timers have been
+       set, blocks until one is added from another thread. */
+       void tick();
 
-       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 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;
 };