X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fthread.h;h=1fff3627b037287aac89cb8e68e77f15d5543b47;hb=7b81490ae4ed6c7c8566f889d146677827f5d4a5;hp=ae257078569c47844e0d4502886f5de403371885;hpb=1f0843257065789231a9949e0a81b79afd7bbebe;p=libs%2Fcore.git diff --git a/source/core/thread.h b/source/core/thread.h index ae25707..1fff362 100644 --- a/source/core/thread.h +++ b/source/core/thread.h @@ -15,8 +15,17 @@ class Thread private: struct Private; + enum State + { + PENDING, + RUNNING, + FINISHED, + KILLED, + JOINED + }; + Private *priv_; - bool launched_; + State state_; protected: Thread(); @@ -26,6 +35,9 @@ 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(); @@ -33,8 +45,17 @@ public: /** 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(); + +private: + void platform_join(); + void platform_kill(); + void platform_launch(); + +protected: virtual void main() = 0; };