00001
00002
00003 class ThreadManager : public SystemCode {
00004 _PROTECTED_:
00005 List<Thread*> ThreadList;
00006 ExclusiveUsage ListInUse;
00007 int32 Offset;
00008 public:
00009 ThreadManager() {Offset = -1;}
00010 Thread *CreateThread(int32 param);
00011 BOOL DeleteThread(Thread *);
00012 uint32 GetThreadCount();
00013 Thread *GetFirstThread();
00014 Thread *GetNextThread(BOOL inc = TRUE);
00015 void Cleanup();
00016
00017
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