X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Fthread.h;h=7cf17b8d327ed3e84075bb4c247f4c5d16c4ff6f;hp=59e6e060ce4b77d2e0e69b45f245e6537ca3a70b;hb=a4596d1c2f627e4568eb6c01d81b6e45f488715a;hpb=5a9200b48b8455185b0fcbd55c69deca88a1184c diff --git a/source/core/thread.h b/source/core/thread.h index 59e6e06..7cf17b8 100644 --- a/source/core/thread.h +++ b/source/core/thread.h @@ -1,13 +1,8 @@ -/* $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_ +#include + namespace Msp { /** @@ -22,21 +17,51 @@ class Thread private: struct Private; + enum State + { + PENDING, + RUNNING, + FINISHED, + KILLED, + JOINED + }; + Private *priv_; - bool launched_; + std::string name_; + State state_; protected: - Thread(); + Thread(const std::string & = std::string()); private: Thread(const Thread &); Thread &operator=(const Thread &); public: virtual ~Thread(); + const std::string &get_name() const { return name_; } + + /** 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(); + +private: + void platform_join(); + void platform_kill(); + void platform_launch(); + void platform_setname(); + +protected: virtual void main() = 0; };