00001 #if !defined(__MCTHREADJOB_H_)
00002 #define __MCTHREADJOB_H_
00003
00004 #ident "@(#)$Id: MCThreadJob.h,v 1.5 2004/12/02 07:05:20 mike Exp $"
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "mcllib/MCBase.h"
00026 #include "mcllib/MCRefCount.h"
00027 #include "mcllib/MCString.h"
00028
00029 namespace mclpriv
00030 {
00031
00032 class ThreadPoolImpl;
00033 class ThreadJobRunnable;
00034 }
00035
00036 namespace mcllib
00037 {
00050 class MCThreadJob : public MCRefCount, public MCBase
00051 {
00052 public:
00060 enum EPriority {
00061 THRJOBPRILOW,
00062 THRJOBPRINORMAL,
00063 THRJOBPRIHIGH,
00064 THRJOBPRIURGENT
00065 };
00081 MCThreadJob(const MCString& name = MCString(0),
00082 mcuint32 minConcurrency = 1,
00083 mcuint32 maxConcurrency = 1,
00084 EPriority pri = THRJOBPRINORMAL);
00085
00087 virtual ~MCThreadJob();
00103 virtual bool work();
00104
00109 const MCString& getName() const;
00114 mcuint32 getMinConcurrency() const;
00119 mcuint32 getMaxConcurrency() const;
00124 EPriority getPriority() const;
00125
00126 protected:
00133 void addTask();
00139 void setDone();
00140
00141 private:
00142 friend class mclpriv::ThreadPoolImpl;
00143 friend class mclpriv::ThreadJobRunnable;
00144
00145 void run();
00146
00147 bool runOne();
00148
00149 void getTaskCounts(mcuint32* pAdd, mcuint32* pDone) const;
00150 };
00151 };
00152
00153 #endif