private:
struct Private;
+ enum State
+ {
+ PENDING,
+ RUNNING,
+ FINISHED,
+ KILLED,
+ JOINED
+ };
+
Private *priv_;
- bool launched_;
+ State state_;
protected:
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();
/** 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;
};