X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Fthread.h;h=81494eaf5e47a007d6bd6207293a972920277362;hp=ef095c6a0ce0ab8bf1a591e8714f2d469c4603f0;hb=a23176e6d3399bbeb75cf6a173543bf5d5f85187;hpb=06acf132d03decb4e3d7b9d95d727f49c7dff428 diff --git a/source/core/thread.h b/source/core/thread.h index ef095c6..81494ea 100644 --- a/source/core/thread.h +++ b/source/core/thread.h @@ -1,14 +1,6 @@ -/* $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 "types.h" - namespace Msp { /** @@ -20,30 +12,45 @@ is started. */ class Thread { +private: + struct Private; + + enum State + { + PENDING, + RUNNING, + FINISHED, + KILLED, + JOINED + }; + + Private *priv_; + State state_; + +protected: + Thread(); +private: + Thread(const Thread &); + Thread &operator=(const Thread &); 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(); - void cancel(); + + /** Violently terminates the thread. This should only be used as a last + resort, as the thread gets no chance to clean up. */ void kill(); - virtual ~Thread(); + protected: - Thread(): launched_(false) { } + /** Starts the thread. Can only be called once for each Thread instance. */ void launch(); - virtual void main()=0; - void check_cancel(); -private: - ThreadHandle thread_; - bool launched_; - Thread(const Thread &); - Thread &operator=(const Thread &); - - static -#ifdef WIN32 - DWORD WINAPI -#else - void * -#endif - main_(void *t) { (reinterpret_cast(t))->main(); return 0; } + virtual void main() = 0; }; } // namespace Msp