ReplicaNet and RNLobby  1
JobManager.h
1 /* START_LICENSE_HEADER
2 
3 Copyright (C) 2000 Martin Piper, original design and program code
4 Copyright (C) 2001 Replica Software
5 
6 This program file is copyright (C) Replica Software and can only be used under license.
7 For more information visit: http://www.replicanet.com/
8 Or email: info@replicanet.com
9 
10 END_LICENSE_HEADER */
11 #include "RNPlatform/Inc/MemoryTracking.h"
12 #ifndef _RNPLATFORM_JOBMANAGER_H_
13 #define _RNPLATFORM_JOBMANAGER_H_
14 
15 #include <stddef.h> // For size_t
16 #include <vector>
17 #include <list>
18 #include <map>
19 #include <set>
20 #include "RNPlatform/Inc/ThreadClass.h"
21 #include "RNPlatform/Inc/Thread.h"
22 #include "RNPlatform/Inc/PlatformInfo.h"
23 
24 namespace RNReplicaNet
25 {
26 
27 class Job;
28 class Worker;
29 
33 class JobManager : public ThreadClass , public Thread
34 {
35 friend Worker;
36 public:
40  JobManager();
41 
45  virtual ~JobManager();
46 
47  void SetPoolSize(const size_t poolSize = PlatformInfo::GetNumberOfCores());
48 
49  bool Start(void);
50 
51  bool Stop(void);
52 
57  bool AddPoolJob(Job *job);
58 
59  int CancelJobs(void* const job);
60 
61 private:
62  int ThreadEntry(void);
63  void ThreadExiting(const int returnCode);
64  void Tidy(void);
65 
66  std::list<Job*> mJobsAdded;
67 // std::list<Job*> mJobsRunning;
68  std::multimap<void*, Job*> mJobReference;
69 
70  std::vector<Worker> mWorkers;
71 };
72 
73 class Worker : public ThreadClass , public Thread
74 {
75 friend JobManager;
76 public:
80  Worker();
81 
85  virtual ~Worker();
86 
87  int ThreadEntry(void);
88  void ThreadExiting(const int returnCode);
89 
90 private:
91  JobManager *mParent;
92  Job *volatile mFromIdle;
93 };
94 
95 class Job
96 {
97 friend JobManager;
98 friend Worker;
99 public:
103  Job();
104 
108  virtual ~Job();
109 
110  virtual void Run(ThreadClass *thread) = 0;
111 
112  bool IsCancelled(void);
113 
114  void SetReference(void *const ref)
115  {
116  mReference = ref;
117  }
118 
119 private:
120  JobManager *mManager;
121  std::list<Job*>::iterator mJobsAddedIter;
122 // std::set<Job*> mJobsRunningIter;
123  std::multimap<void*, Job*>::iterator mJobReferenceIter;
124  void *mReference;
125  volatile bool mCancelled;
126 };
127 
128 } // namespace RNReplicaNet
129 
130 #endif
void ThreadExiting(const int returnCode)
Definition: JobManager.h:73
Definition: JobManager.h:33
static int GetNumberOfCores(void)
bool AddPoolJob(Job *job)
Definition: JobManager.h:95
Definition: ThreadClass.h:96
Definition: Thread.h:29