1 #ifndef MSP_CORE_THREAD_H_
2 #define MSP_CORE_THREAD_H_
5 #include "mspcore_api.h"
6 #include "noncopyable.h"
11 Base class for threads. To create a thread for some task, derive it from this
12 class and implement the main() function. Note that threads are not
13 automatically started upon creation - you must manually call launch() instead.
14 This is to allow initializing variables of the derived class before the thread
17 class MSPCORE_API Thread: private NonCopyable
31 Private *_priv = nullptr;
33 State _state = PENDING;
36 Thread(const std::string & = std::string());
40 const std::string &get_name() const { return _name; }
42 /** Indicates whether the thread has finished running. */
43 bool is_finished() { return _state>=FINISHED; }
45 /** Waits for the thread to exit. Calling this from the thread will cause a
49 /** Violently terminates the thread. This should only be used as a last
50 resort, as the thread gets no chance to clean up. */
54 /** Starts the thread. Can only be called once for each Thread instance. */
60 void platform_launch();
61 void platform_setname();
64 virtual void main() = 0;