]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/thread.h
Make the Thread state machine more strict
[libs/core.git] / source / core / thread.h
index 59e6e060ce4b77d2e0e69b45f245e6537ca3a70b..81494eaf5e47a007d6bd6207293a972920277362 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspcore
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_CORE_THREAD_H_
 #define MSP_CORE_THREAD_H_
 
@@ -22,8 +15,17 @@ class Thread
 private:
        struct Private;
 
+       enum State
+       {
+               PENDING,
+               RUNNING,
+               FINISHED,
+               KILLED,
+               JOINED
+       };
+
        Private *priv_;
-       bool launched_;
+       State state_;
 
 protected:
        Thread();
@@ -33,10 +35,21 @@ private:
 public:
        virtual ~Thread();
 
+       /** Indicates whether the thread has finished running. */
+       bool is_finished() { return state_>=FINISHED; }
+
+       /** Waits for the thread to exit.  Calling this from the thread will cause a
+       deadlock. */
        void join();
+
+       /** Violently terminates the thread.  This should only be used as a last
+       resort, as the thread gets no chance to clean up. */
        void kill();
+
 protected:
+       /** Starts the thread.  Can only be called once for each Thread instance. */
        void launch();
+
        virtual void main() = 0;
 };