You.i Engine
YiLoadThreadManager.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_LOAD_THREAD_MANAGER_INL_
3 #define _YI_LOAD_THREAD_MANAGER_INL_
4 
10 #include "signal/YiSignal.h"
11 #include "thread/YiMutex.h"
12 #include "thread/YiAutoMutex.h"
13 #include "thread/YiWaitCondition.h"
14 #include "thread/YiThread.h"
15 
17 {
18 public:
19  virtual ~IYIRunOnThread() {};
20  virtual void DoInWorkerThread() = 0;
21 };
22 
23 class CYILoadThread;
24 class CYIThreadManager;
25 
38 {
39 public:
40 
44  CYILoadThreadManager(int32_t nThreads);
46 
51  void StopManager();
52 
56  void Load(std::unique_ptr<IYIRunOnThread> pResource);
57 
63  void Unload(const IYIRunOnThread *pResource);
64 
65 private:
66 
67  struct Stats
68  {
69  Stats() : nLoad(0), nUnload(0), nThreadStarted(0),
70  nRemovedUnprocessed(0), nThreadStarved(0), nRegularUnload(0)
71  {}
72  int nLoad;
73  int nUnload;
74  int nThreadStarted;
75  int nRemovedUnprocessed;
76  int nThreadStarved;
77  int nRegularUnload;
78  } mStats;
79 
80  void RemoveUnprocessed();
81 
82  virtual void Run() override;
83 
84  std::list<IYIRunOnThread*> mListLoad;
85  std::list<const IYIRunOnThread *> mListUnload;
86 
87  typedef std::pair<IYIRunOnThread*, CYILoadThread* > pairDataThread;
88  std::list<pairDataThread> mListRunning;
89 
90  CYIMutex mQueueMutex;
91  CYIWaitCondition mAvailableItem;
92 
93  bool m_Stop;
94  uint32_t m_ManagerId;
95  std::unique_ptr<CYIThreadManager> m_pThreadManager;
96  std::map<int32_t, CYILoadThread *> m_Threads;
97 };
98 
101 #endif // _YI_LOAD_THREAD_MANAGER_INL_
Definition: YiLoadThreadManager.h:16
Definition: YiMutex.h:110
A class that loads data in a pool of threads.
Definition: YiLoadThreadManager.h:37
virtual void DoInWorkerThread()=0
Definition: YiThreadManager.h:43
virtual ~IYIRunOnThread()
Definition: YiLoadThreadManager.h:19
Definition: YiThread.h:86
A class used to block a thread until a condition is met, as signaled by a different thread...
Definition: YiWaitCondition.h:64