You.i Engine
YiThreadPools.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_THREAD_POOLS_H_
3 #define _YI_THREAD_POOLS_H_
4 
5 #include "YiTask.h"
6 #include "YiThreadPool.h"
7 
59 {
60 public:
66  CYIThreadPools(bool bInstanciateDefaultPool = true, uint32_t uDefaultPoolThreadsCount = 0);
68 
81 
100  static CYIThreadPool *GetManagedThreadPool(const CYIString &name, uint32_t uMaxSize = 4, uint32_t uMaxSleepingSize = 4, uint32_t uInitialSize = 2, uint32_t uExpiryTimeMs = 30000, YI_PRIORITY ePriority = YI_PRIORITY_DEFAULT, uint32_t uStackSize = CYIThread::DEFAULT_STACK_SIZE);
101 
109  static bool DestroyManagedThreadPool(const CYIString &name);
110 
116  static uint32_t GetDefaultPoolThreadsCount();
117 
126  static uint32_t GetLogicalProcessorsCount(bool bUsableProcessorsOnly);
127 
128 public: //static helper functions
138  static bool RunOnNewThread(std::unique_ptr<CYITaskBase> pTask);
139 
147  static bool RunOnUIThread(std::unique_ptr<CYITaskBase> pTask);
148 
156  static bool RunAsync(std::unique_ptr<CYITaskBase> pTask);
157 
159  CYIThreadPool *InstanceGetManagedThreadPool(const CYIString &name, uint32_t uMaxSize = 4, uint32_t uMaxSleepingSize = 4, uint32_t uInitialSize = 2, uint32_t uExpiryTimeMs = 30000, YI_PRIORITY ePriority = YI_PRIORITY_DEFAULT, uint32_t uStackSize = CYIThread::DEFAULT_STACK_SIZE);
160  bool InstanceDestroyManagedThreadPool(const CYIString &name);
161  bool InstanceRunOnNewThread(std::unique_ptr<CYITaskBase> pTask);
162  bool InstanceRunAsync(std::unique_ptr<CYITaskBase> pTask);
163 
164 private:
171  class OneOffWorkerThread : public CYIThread
172  {
173  public:
174  OneOffWorkerThread(CYIThreadPools *pOwnerPools, std::unique_ptr<CYITaskBase> pTask);
175  virtual ~OneOffWorkerThread();
176  virtual void Run() override;
177  void SetDeletable();
178  bool IsDeletable();
179 
180  private:
181  CYIThreadPools *m_pOwnerPools;
182  std::unique_ptr<CYITaskBase> m_pTask;
183  bool m_bDeletable;
184  CYIMutex m_mutex;
185  };
186 
192  class ThreadDeletingTask : public CYITask<bool>
193  {
194  public:
195  ThreadDeletingTask(CYIThreadPools *pOwnerPools, OneOffWorkerThread *pThread);
196  virtual ~ThreadDeletingTask();
197  virtual bool Run() override;
198 
199  private:
200  CYIThreadPools *m_pOwnerPools;
201  OneOffWorkerThread *m_pThread;
202  };
203 
204  static CYIThreadPools *GetInstance();
205 
206  CYIMutex m_mutex;
207  bool m_bShutDown;
208  CYIThreadPool *m_pDefaultThreadPool;
209  std::map<CYIString, CYIThreadPool*> m_threadPools;
210  std::atomic<int32_t> m_nOneOffWorkerID;
211  std::atomic<int32_t> m_nNonDeletedOneOffWorkers;
212 
214 };
215 
220 #endif // _YI_THREAD_POOLS_H_
static bool RunOnNewThread(std::unique_ptr< CYITaskBase > pTask)
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
static bool RunAsync(std::unique_ptr< CYITaskBase > pTask)
CYIThreadPool * InstanceGetManagedThreadPool(const CYIString &name, uint32_t uMaxSize=4, uint32_t uMaxSleepingSize=4, uint32_t uInitialSize=2, uint32_t uExpiryTimeMs=30000, YI_PRIORITY ePriority=YI_PRIORITY_DEFAULT, uint32_t uStackSize=CYIThread::DEFAULT_STACK_SIZE)
Definition: YiMutex.h:110
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
static CYIThreadPool * GetDefaultThreadPool()
CYIThreadPools(bool bInstanciateDefaultPool=true, uint32_t uDefaultPoolThreadsCount=0)
Definition: YiThreadPool.h:39
static const uint32_t DEFAULT_STACK_SIZE
Definition: YiThread.h:91
YI_PRIORITY
Definition: YiThread.h:14
static uint32_t GetLogicalProcessorsCount(bool bUsableProcessorsOnly)
returns 0 if the processors count could not be determined
static CYIThreadPool * GetManagedThreadPool(const CYIString &name, uint32_t uMaxSize=4, uint32_t uMaxSleepingSize=4, uint32_t uInitialSize=2, uint32_t uExpiryTimeMs=30000, YI_PRIORITY ePriority=YI_PRIORITY_DEFAULT, uint32_t uStackSize=CYIThread::DEFAULT_STACK_SIZE)
bool InstanceRunOnNewThread(std::unique_ptr< CYITaskBase > pTask)
bool InstanceRunAsync(std::unique_ptr< CYITaskBase > pTask)
Definition: YiThread.h:24
static bool DestroyManagedThreadPool(const CYIString &name)
Definition: YiTask.h:168
static bool RunOnUIThread(std::unique_ptr< CYITaskBase > pTask)
static uint32_t GetDefaultPoolThreadsCount()
bool InstanceDestroyManagedThreadPool(const CYIString &name)
CYIThreadPool * InstanceGetDefaultThreadPool()
Definition: YiThreadPools.h:58
Definition: YiThread.h:86