X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Frunloop.hh;fp=src%2Fmoof%2Frunloop.hh;h=0aad06dddaa9a25c82fc2f9d1e17c2c4af3d5667;hp=0000000000000000000000000000000000000000;hb=d6990468d297a6cbee98e4d0d33ab37e1b2352c9;hpb=1d4aa0d34b0410c7bc60a24bad7abb55eacc850a diff --git a/src/moof/runloop.hh b/src/moof/runloop.hh new file mode 100644 index 0000000..0aad06d --- /dev/null +++ b/src/moof/runloop.hh @@ -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 + +#include + +#include +#include + + +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_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_ +