]> Dogcows Code - chaz/yoink/blobdiff - src/moof/runloop.hh
initial runloop implementation
[chaz/yoink] / src / moof / runloop.hh
diff --git a/src/moof/runloop.hh b/src/moof/runloop.hh
new file mode 100644 (file)
index 0000000..0aad06d
--- /dev/null
@@ -0,0 +1,103 @@
+
+/*]  Copyright (c) 2009-2010, Charles McGarvey  [**************************
+**]  All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
+
+#ifndef _MOOF_RUNLOOP_HH_
+#define _MOOF_RUNLOOP_HH_
+
+/**
+ * \file runloop.hh
+ * Thread timer management class.
+ */
+
+#include <set>
+
+#include <boost/noncopyable.hpp>
+
+#include <moof/backend.hh>
+#include <moof/thread.hh>
+
+
+namespace moof {
+
+
+// forward declarations
+class timer;
+       
+
+/**
+ * A runloop is a loop with scheduled timers.
+ */
+class runloop
+{
+public:
+
+       /**
+        * Construct a runloop.
+        */
+       runloop() :
+               stop_(false),
+               thread_id_(0) {}
+
+       /**
+        * Deconstruct the runloop.
+        */
+       ~runloop();
+
+
+       /**
+        * Start running the runloop.
+        * \return The exit code.
+        */
+       int run();
+
+       /**
+        * Stop the runloop.
+        * \param code The exit code.
+        */
+       void stop(int code = 0);
+
+
+       /** Get the runloop of the current thread.
+        * \return The current runloop or 0 if none is running in the current
+        * thread.
+        */
+       static runloop* current();
+
+
+private:
+
+       friend class timer;
+
+       void add_timer(timer* timer);
+       void remove_timer(timer* timer);
+
+
+       bool            stop_;
+       int                     code_;
+
+       typedef std::set<timer*> timer_table;
+       timer_table     timers_;
+       timer_table::iterator timers_it_;
+
+#if ENABLE_THREADS
+       MOOF_DECLARE_MUTEX(timers_mutex_);
+       uint32_t        thread_id_;
+#endif
+
+
+       backend         backend_;
+};
+
+
+} // namespace moof
+
+#endif // _MOOF_RUNLOOP_HH_
+
This page took 0.020268 seconds and 4 git commands to generate.