X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fthread.h;h=ae9a0dda832b716445ad81b9493b8a7c24ca6778;hb=5763dd6e8089c97699cbcbd221afb7fe1841bcdd;hp=81494eaf5e47a007d6bd6207293a972920277362;hpb=a23176e6d3399bbeb75cf6a173543bf5d5f85187;p=libs%2Fcore.git diff --git a/source/core/thread.h b/source/core/thread.h index 81494ea..ae9a0dd 100644 --- a/source/core/thread.h +++ b/source/core/thread.h @@ -1,6 +1,9 @@ #ifndef MSP_CORE_THREAD_H_ #define MSP_CORE_THREAD_H_ +#include +#include "noncopyable.h" + namespace Msp { /** @@ -10,7 +13,7 @@ automatically started upon creation - you must manually call launch() instead. This is to allow initializing variables of the derived class before the thread is started. */ -class Thread +class Thread: private NonCopyable { private: struct Private; @@ -24,19 +27,19 @@ private: JOINED }; - Private *priv_; - State state_; + Private *_priv = 0; + std::string _name; + State _state = PENDING; protected: - Thread(); -private: - Thread(const Thread &); - Thread &operator=(const Thread &); + Thread(const std::string & = std::string()); public: virtual ~Thread(); + const std::string &get_name() const { return _name; } + /** Indicates whether the thread has finished running. */ - bool is_finished() { return state_>=FINISHED; } + bool is_finished() { return _state>=FINISHED; } /** Waits for the thread to exit. Calling this from the thread will cause a deadlock. */ @@ -50,6 +53,13 @@ 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; };