include/df/threadmgr.hpp

00001 //Thread Manager abstract class
00002 
00003 class ThreadManager : public SystemCode {
00004   _PROTECTED_:
00005     List<Thread*> ThreadList;  //list of Threads
00006     ExclusiveUsage ListInUse;
00007     int32 Offset;
00008   public:
00009     ThreadManager() {Offset = -1;}
00010     Thread *CreateThread(int32 param);
00011     BOOL DeleteThread(Thread *);
00012     uint32 GetThreadCount();  //see thread.cpp
00013     Thread *GetFirstThread();
00014     Thread *GetNextThread(BOOL inc = TRUE);
00015     void Cleanup();      //deletes Terminated threads (thread.cpp)
00016 
00017     //these two functions do the actual new/delete of a thread
00018     virtual Thread *_CreateThread() = 0;
00019 #ifndef THREADMANAGER_VDTOR
00020     virtual void _DeleteThread(Thread *) = 0;
00021 #endif
00022 };
00023 
00024 #ifndef THREADMANAGER_VDTOR
00025 
00026 #define DefineThreadManager(MyThreadManager,MyClass,MyInst)\
00027   class MyThreadManager : public ThreadManager {             \
00028     public:                                                  \
00029       Thread *_CreateThread() {                              \
00030         MyClass *ret = new MyClass;                          \
00031         return (Thread*)ret;                                 \
00032       }                                                      \
00033       void _DeleteThread(Thread *thread) {                   \
00034         MyClass *del;                                        \
00035         del = (MyClass*)thread;                              \
00036         delete del;                                          \
00037       }                                                      \
00038   };  static MyThreadManager MyInst;
00039 
00040 #else //THREADMANAGER_VDTOR
00041 
00042 #define DefineThreadManager(MyThreadManager,MyClass,MyInst)\
00043   class MyThreadManager : public ThreadManager {             \
00044     public:                                                  \
00045       Thread *_CreateThread() {                              \
00046         MyClass *ret = new MyClass;                          \
00047         return (Thread*)ret;                                 \
00048       }                                                      \
00049   };  static MyThreadManager MyInst;
00050 
00051 #endif //THREADMANAGER_VDTOR
00052 
00053 

Generated on Mon Mar 5 09:49:14 2007 for DigiForce by  doxygen 1.4.7