QTrk
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
ThreadPool< TWorkItem, TFunctor > Class Template Reference

#include <threads.h>

Public Member Functions

 ThreadPool (TFunctor f, int Nthreads=-1)
 
 ~ThreadPool ()
 
void ProcessArray (TWorkItem *items, int n)
 
void AddWork (TWorkItem w)
 
void WaitUntilDone ()
 
bool IsDone ()
 
void Quit ()
 

Protected Member Functions

void ItemDone ()
 
bool GetNewItem (TWorkItem &item)
 

Static Protected Member Functions

static void ThreadEntryPoint (void *param)
 

Protected Attributes

std::vector< Threads::Handle * > threads
 
Threads::Mutex workMutex
 
std::list< TWorkItem > work
 
int inProgress
 
Atomic< bool > quit
 
TFunctor worker
 

Detailed Description

template<typename TWorkItem, typename TFunctor>
class ThreadPool< TWorkItem, TFunctor >

Definition at line 177 of file threads.h.

Constructor & Destructor Documentation

§ ThreadPool()

template<typename TWorkItem, typename TFunctor>
ThreadPool< TWorkItem, TFunctor >::ThreadPool ( TFunctor  f,
int  Nthreads = -1 
)
inline

Definition at line 179 of file threads.h.

179  : worker(f) {
180  if (Nthreads<0)
181  Nthreads = Threads::GetCPUCount();
182  threads.resize(Nthreads);
183  quit=false;
184  inProgress=0;
185  for (int i=0;i<Nthreads;i++)
187  }
int inProgress
Definition: threads.h:245
static Handle * Create(ThreadEntryPoint method, void *param)
Definition: threads.h:99
static void ThreadEntryPoint(void *param)
Definition: threads.h:216
TFunctor worker
Definition: threads.h:247
std::vector< Threads::Handle * > threads
Definition: threads.h:242
static int GetCPUCount()
Definition: threads.h:138
Atomic< bool > quit
Definition: threads.h:246

§ ~ThreadPool()

template<typename TWorkItem, typename TFunctor>
ThreadPool< TWorkItem, TFunctor >::~ThreadPool ( )
inline

Definition at line 188 of file threads.h.

188  {
189  Quit();
190  }
void Quit()
Definition: threads.h:209

Member Function Documentation

§ AddWork()

template<typename TWorkItem, typename TFunctor>
void ThreadPool< TWorkItem, TFunctor >::AddWork ( TWorkItem  w)
inline

Definition at line 195 of file threads.h.

195  {
196  workMutex.lock();
197  work.push_back(w);
198  workMutex.unlock();
199  }
void lock()
Definition: threads.h:74
std::list< TWorkItem > work
Definition: threads.h:244
Threads::Mutex workMutex
Definition: threads.h:243
void unlock()
Definition: threads.h:79

§ GetNewItem()

template<typename TWorkItem, typename TFunctor>
bool ThreadPool< TWorkItem, TFunctor >::GetNewItem ( TWorkItem &  item)
inlineprotected

Definition at line 231 of file threads.h.

231  {
232  workMutex.lock();
233  bool r = !work.empty();
234  if (r) {
235  item = work.front();
236  work.pop_front();
237  inProgress++;
238  }
239  workMutex.unlock();
240  return r;
241  }
int inProgress
Definition: threads.h:245
void lock()
Definition: threads.h:74
std::list< TWorkItem > work
Definition: threads.h:244
Threads::Mutex workMutex
Definition: threads.h:243
void unlock()
Definition: threads.h:79

§ IsDone()

template<typename TWorkItem, typename TFunctor>
bool ThreadPool< TWorkItem, TFunctor >::IsDone ( )
inline

Definition at line 203 of file threads.h.

203  {
204  workMutex.lock();
205  bool r=work.empty() && inProgress==0;
206  workMutex.unlock();
207  return r;
208  }
int inProgress
Definition: threads.h:245
void lock()
Definition: threads.h:74
std::list< TWorkItem > work
Definition: threads.h:244
Threads::Mutex workMutex
Definition: threads.h:243
void unlock()
Definition: threads.h:79

§ ItemDone()

template<typename TWorkItem, typename TFunctor>
void ThreadPool< TWorkItem, TFunctor >::ItemDone ( )
inlineprotected

Definition at line 226 of file threads.h.

226  {
227  workMutex.lock();
228  inProgress--;
229  workMutex.unlock();
230  }
int inProgress
Definition: threads.h:245
void lock()
Definition: threads.h:74
Threads::Mutex workMutex
Definition: threads.h:243
void unlock()
Definition: threads.h:79

§ ProcessArray()

template<typename TWorkItem, typename TFunctor>
void ThreadPool< TWorkItem, TFunctor >::ProcessArray ( TWorkItem *  items,
int  n 
)
inline

Definition at line 191 of file threads.h.

191  {
192  for(int i=0;i<n;i++)
193  AddWork(items[i]);
194  }
void AddWork(TWorkItem w)
Definition: threads.h:195

§ Quit()

template<typename TWorkItem, typename TFunctor>
void ThreadPool< TWorkItem, TFunctor >::Quit ( )
inline

Definition at line 209 of file threads.h.

209  {
210  quit=true;
211  for(uint i=0;i<threads.size();i++)
213  threads.clear();
214  }
unsigned int uint
Definition: std_incl.h:127
std::vector< Threads::Handle * > threads
Definition: threads.h:242
Atomic< bool > quit
Definition: threads.h:246
static void WaitAndClose(Handle *h)
Definition: threads.h:128

§ ThreadEntryPoint()

template<typename TWorkItem, typename TFunctor>
static void ThreadPool< TWorkItem, TFunctor >::ThreadEntryPoint ( void *  param)
inlinestaticprotected

Definition at line 216 of file threads.h.

216  {
217  ThreadPool* pool = ( ThreadPool *)param;
218  TWorkItem item;
219  while (!pool->quit) {
220  if ( pool->GetNewItem(item) ) {
221  pool->worker(item);
222  pool->ItemDone();
223  } else Threads::Sleep(1);
224  }
225  }
TFunctor worker
Definition: threads.h:247
bool GetNewItem(TWorkItem &item)
Definition: threads.h:231
Atomic< bool > quit
Definition: threads.h:246
static void Sleep(int ms)
Definition: threads.h:134
void ItemDone()
Definition: threads.h:226

§ WaitUntilDone()

template<typename TWorkItem, typename TFunctor>
void ThreadPool< TWorkItem, TFunctor >::WaitUntilDone ( )
inline

Definition at line 200 of file threads.h.

200  {
201  while(!IsDone()) Threads::Sleep(1);
202  }
bool IsDone()
Definition: threads.h:203
static void Sleep(int ms)
Definition: threads.h:134

Member Data Documentation

§ inProgress

template<typename TWorkItem, typename TFunctor>
int ThreadPool< TWorkItem, TFunctor >::inProgress
protected

Definition at line 245 of file threads.h.

§ quit

template<typename TWorkItem, typename TFunctor>
Atomic<bool> ThreadPool< TWorkItem, TFunctor >::quit
protected

Definition at line 246 of file threads.h.

§ threads

template<typename TWorkItem, typename TFunctor>
std::vector<Threads::Handle*> ThreadPool< TWorkItem, TFunctor >::threads
protected

Definition at line 242 of file threads.h.

§ work

template<typename TWorkItem, typename TFunctor>
std::list<TWorkItem> ThreadPool< TWorkItem, TFunctor >::work
protected

Definition at line 244 of file threads.h.

§ worker

template<typename TWorkItem, typename TFunctor>
TFunctor ThreadPool< TWorkItem, TFunctor >::worker
protected

Definition at line 247 of file threads.h.

§ workMutex

template<typename TWorkItem, typename TFunctor>
Threads::Mutex ThreadPool< TWorkItem, TFunctor >::workMutex
protected

Definition at line 243 of file threads.h.


The documentation for this class was generated from the following file: