From 83fc39219825532fbbbaa6a6af2942e82f350845 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Wed, 1 Feb 2012 12:25:26 +0000 Subject: new cIsThread object for thread encapsulation git-svn-id: http://mc-server.googlecode.com/svn/trunk@214 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cIsThread.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 source/cIsThread.h (limited to 'source/cIsThread.h') diff --git a/source/cIsThread.h b/source/cIsThread.h new file mode 100644 index 000000000..f46d7f065 --- /dev/null +++ b/source/cIsThread.h @@ -0,0 +1,77 @@ + +// cIsThread.h + +// Interfaces to the cIsThread class representing an OS-independent wrapper for a class that implements a thread. +// This class will eventually suupersede the old cThread class + +/* +Usage: +To have a new thread, declare a class descending from cIsClass. +Then override its Execute() method to provide your thread processing. +In the descending class' constructor call the Start() method to start the thread once you're finished with initialization. +*/ + + + + + +#pragma once +#ifndef CISTHREAD_H_INCLUDED +#define CISTHREAD_H_INCLUDED + + + + + +class cIsThread +{ +protected: + virtual void Execute(void) = 0; // This function is called in the new thread's context + + volatile bool mShouldTerminate; // The overriden Execute() method should check this periodically and terminate if this is true + +public: + cIsThread(const AString & iThreadName); + ~cIsThread(); + + bool Start(void); // Starts the thread + bool Wait(void); // Waits for the thread to finish + +private: + AString mThreadName; + cEvent mEvent; // This event is set when the thread begins executing + + #ifdef _WIN32 + + HANDLE mHandle; + + static DWORD_PTR __stdcall thrExecute(LPVOID iParam) + { + ((cIsThread *)iParam)->Execute(); + return 0; + } + + #else // _WIN32 + + pthread_t mHandle; + bool mHasStarted; + + static void * thrExecute(void * iParam) + { + ((cIsThread *)iParam)->Execute(); + return NULL; + } + + #endif // else _WIN32 + +} ; + + + + + +#endif // CISTHREAD_H_INCLUDED + + + + -- cgit v1.2.3