summaryrefslogtreecommitdiffstats
path: root/src/server/ThreadManager.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-05-14 04:30:00 +0000
committerDavid Robillard <d@drobilla.net>2012-05-14 04:30:00 +0000
commitf180683d453814dcd4a00eb5f0946fd7fc5677c4 (patch)
treeddd150d207c237c72ebf424acf517ce847bf2674 /src/server/ThreadManager.hpp
parent121b8a2c33125225e11539b83d87cb9a1d70e537 (diff)
downloadingen-f180683d453814dcd4a00eb5f0946fd7fc5677c4.tar.gz
ingen-f180683d453814dcd4a00eb5f0946fd7fc5677c4.tar.bz2
ingen-f180683d453814dcd4a00eb5f0946fd7fc5677c4.zip
Remove Thread context stuff and add a thread-specific variable class, ThreadVar, which can be used for this and many other things.
ClientBroadcaster => Broadcaster. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4405 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/ThreadManager.hpp')
-rw-r--r--src/server/ThreadManager.hpp33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/server/ThreadManager.hpp b/src/server/ThreadManager.hpp
index 23ff126a..445219ae 100644
--- a/src/server/ThreadManager.hpp
+++ b/src/server/ThreadManager.hpp
@@ -19,34 +19,45 @@
#include <cassert>
#include "raul/Thread.hpp"
+#include "raul/ThreadVar.hpp"
namespace Ingen {
namespace Server {
-enum ThreadID {
- THREAD_PRE_PROCESS,
- THREAD_PROCESS,
- THREAD_MESSAGE,
+enum ThreadFlag {
+ THREAD_IS_REAL_TIME = 1,
+ THREAD_PRE_PROCESS = 1 << 1,
+ THREAD_PROCESS = 1 << 2,
+ THREAD_MESSAGE = 1 << 3,
};
class ThreadManager {
public:
- inline static bool thread_is(ThreadID id) {
- return Raul::Thread::get().is_context(id);
+ static inline void set_flag(ThreadFlag f) {
+#ifndef NDEBUG
+ flags = ((unsigned)flags | f);
+#endif
}
- inline static void assert_thread(ThreadID id) {
- assert(single_threaded || Raul::Thread::get().is_context(id));
+ static inline void unset_flag(ThreadFlag f) {
+#ifndef NDEBUG
+ flags = ((unsigned)flags & (~f));
+#endif
}
- inline static void assert_not_thread(ThreadID id) {
- assert(single_threaded || !Raul::Thread::get().is_context(id));
+ static inline void assert_thread(ThreadFlag f) {
+ assert(single_threaded || (flags & f));
+ }
+
+ static inline void assert_not_thread(ThreadFlag f) {
+ assert(single_threaded || !(flags & f));
}
/** Set to true during initialisation so ensure_thread doesn't fail.
* Defined in Engine.cpp
*/
- static bool single_threaded;
+ static bool single_threaded;
+ static Raul::ThreadVar<unsigned> flags;
};
} // namespace Server