X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=inline;f=include%2Fthreadengine.h;h=10f3fed13b5fa6684397f105deace4386244e65e;hb=219993bc9018d9f0d9568330d7a972b68b785d27;hp=d7eaaef6938277e4b559d5007ebd02ee51425fb5;hpb=59dbcc1245468218ec7e2372b2678351382a34f0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/threadengine.h b/include/threadengine.h index d7eaaef69..10f3fed13 100644 --- a/include/threadengine.h +++ b/include/threadengine.h @@ -20,18 +20,23 @@ #include "inspircd_config.h" #include "base.h" +#ifdef WINDOWS +#include "threadengines/threadengine_win32.h" +#endif + +class ThreadData; + /** Derive from this class to implement your own threaded sections of * code. Be sure to keep your code thread-safe and not prone to deadlocks * and race conditions if you MUST use threading! */ -class CoreExport Thread : public Extensible +class CoreExport Thread { private: /** Set to true when the thread is to exit */ bool ExitFlag; -// TODO protected: - public: + protected: /** Get thread's current exit status. * (are we being asked to exit?) */ @@ -50,17 +55,8 @@ class CoreExport Thread : public Extensible { } - /** If this thread has a Creator set, call it to - * free the thread - */ - virtual ~Thread() - { - if (state) - { - state->FreeThread(this); - delete state; - } - } + /* If the thread is running, you MUST join BEFORE deletion */ + virtual ~Thread(); /** Override this method to put your actual * threaded code here. @@ -69,10 +65,11 @@ class CoreExport Thread : public Extensible /** Signal the thread to exit gracefully. */ - virtual void SetExitFlag() - { - ExitFlag = true; - } + virtual void SetExitFlag(); + + /** Join the thread (calls SetExitFlag and waits for exit) + */ + void join(); };