X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Fthread.h;h=81494eaf5e47a007d6bd6207293a972920277362;hp=ac7169ff0250c509260f7303834d34fb7fb83155;hb=a23176e6d3399bbeb75cf6a173543bf5d5f85187;hpb=967785734be5c3fc6f75da122c2d93ebbb338271 diff --git a/source/core/thread.h b/source/core/thread.h index ac7169f..81494ea 100644 --- a/source/core/thread.h +++ b/source/core/thread.h @@ -15,8 +15,17 @@ class Thread private: struct Private; + enum State + { + PENDING, + RUNNING, + FINISHED, + KILLED, + JOINED + }; + Private *priv_; - bool launched_; + State state_; protected: Thread(); @@ -26,10 +35,21 @@ private: 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(); + virtual void main() = 0; };