#include <WorkerGroup.h>
Inheritance diagram for SctService::WorkerGroup< T >:
Queue @{ the queue itself contains pointers to objects to be | |||
worked on. | |||
std::queue< DataType > | m_queue | ||
boost::thread_group | m_thread_group | ||
boost thread group from which threads can be created | |||
volatile bool | m_run | ||
if false, threads are to stop. | |||
volatile bool | m_pause | ||
does not execute work() if true | |||
volatile unsigned | m_sleeptime | ||
time to sleep if queue is empty | |||
boost::mutex | m_queueAccess | ||
queueLock | |||
boost::mutex | m_vectorAccess | ||
vectorLock | |||
class | Worker | ||
Public Types | |||
typedef T | DataType | ||
Public Member Functions | |||
void | go (unsigned nWorker=1) | ||
Start this worker group.
| |||
unsigned | queueSize () | ||
get the number of objects in the queue | |||
unsigned | nWorkers () | ||
get the number of workers in the map | |||
unsigned | busy () | ||
get the number of threads which are busy. | |||
void | stop () | ||
Raise flag to stop all worker threads. | |||
void | setPaused (bool paused=true) | ||
void | join () | ||
Call this to make sure that Worker threads continue to completion. | |||
unsigned | paused () | ||
get the number of paused threads | |||
void | setSleepTime (unsigned msec) | ||
Set sleep time for all workers, if no items are on the queue. | |||
unsigned | getSleepTime () | ||
Get the sleep time. | |||
DataType | pop () | ||
void | push (DataType ob) | ||
Push an object onto the back of the queue. | |||
virtual | ~WorkerGroup () | ||
destructor | |||
WorkerGroup () | |||
Constructor. | |||
Protected Types | |||
typedef std::vector< Worker * > | WorkerStore | ||
typedef WorkerStore::iterator | Iterator | ||
Protected Member Functions | |||
virtual void | threadMain (Worker &worker) throw () | ||
The threadMain method. | |||
virtual bool | popAndWork (Worker &worker) | ||
If the queue length != 0, removes an element from the queue and class work. | |||
virtual void | waitForData () | ||
Called if there is no data on the queue. | |||
virtual void | work (DataType data)=0 throw () | ||
To be overriden! Should actually do something with the data! | |||
void | wait (int msec) | ||
Causes this thread to sleep for msec milliseconds. | |||
void | addWorker (Worker &worker) | ||
threadMain should call this with its parameter. | |||
Protected Attributes | |||
Worker thread information @{ | |||
This map allows each thread to access different particular information from its own Worker. | |||
WorkerStore | m_workers |
Contains the queue to which objects of type T are pushed. Also useful functions to control and query the worker threads. The template class ``T'' is the data/instructions which the workers at to work on. Derive this class to implement/modify the behaviour of the worker threads. At the least, the work method needs an implementation. T must be DefaultConstructible For a simple example, see the test/MyWorkerGroup.h file
Definition at line 23 of file WorkerGroup.h.
|
Definition at line 25 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::pop(), and SctService::WorkerGroup< T >::popAndWork(). |
|
Definition at line 128 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::busy(), and SctService::WorkerGroup< T >::paused(). |
|
Definition at line 127 of file WorkerGroup.h. |
|
destructor
Definition at line 81 of file WorkerGroup.h. |
|
Constructor.
Definition at line 84 of file WorkerGroup.h. |
|
threadMain should call this with its parameter.
Definition at line 186 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_workers. |
|
get the number of threads which are busy.
Definition at line 263 of file WorkerGroup.h. References SctService::WorkerGroup< T >::Iterator, and SctService::WorkerGroup< T >::m_workers. |
|
Get the sleep time.
Definition at line 69 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::waitForData(). |
|
Start this worker group.
Definition at line 158 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_thread_group, and SctService::WorkerGroup< T >::Worker. Referenced by SctArchivingService::ArchivingService::run(), and SctAnalysis::AnalysisService::run(). |
|
Call this to make sure that Worker threads continue to completion.
Definition at line 244 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_thread_group. Referenced by SctService::WorkerGroup< T >::stop(). |
|
get the number of workers in the map
Definition at line 233 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_workers. |
|
get the number of paused threads
Definition at line 254 of file WorkerGroup.h. References SctService::WorkerGroup< T >::Iterator, and SctService::WorkerGroup< T >::m_workers. |
|
Definition at line 199 of file WorkerGroup.h. References SctService::WorkerGroup< T >::DataType, and SctService::WorkerGroup< T >::m_queue. |
|
If the queue length != 0, removes an element from the queue and class work.
Definition at line 212 of file WorkerGroup.h. References SctService::WorkerGroup< T >::DataType, SctService::WorkerGroup< T >::Worker::m_busy, SctService::WorkerGroup< T >::m_queue, and SctService::WorkerGroup< T >::work(). |
|
Push an object onto the back of the queue.
Definition at line 192 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_queue. Referenced by SctArchivingService::ArchivingService::archive(), SctFitter::Fitter::doFits(), and SctAnalysis::AnalysisService::scanResultCallback(). |
|
get the number of objects in the queue
Definition at line 228 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_queue. |
|
Definition at line 249 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_pause. |
|
Set sleep time for all workers, if no items are on the queue.
Definition at line 272 of file WorkerGroup.h. References SctService::WorkerGroup< T >::m_sleeptime. |
|
Raise flag to stop all worker threads.
Definition at line 238 of file WorkerGroup.h. References SctService::WorkerGroup< T >::join(), and SctService::WorkerGroup< T >::m_run. |
|
The threadMain method. Can be overriden if sub-classes want to completly change the behaviour! Current implementation checks various flags for pausing, stopping etc, then calls popAndWork. If popAndWork returns false, then it calls waitForData Definition at line 166 of file WorkerGroup.h. |
|
Causes this thread to sleep for msec milliseconds.
Definition at line 277 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::waitForData(). |
|
Called if there is no data on the queue. Calls wait in default implementation. Definition at line 285 of file WorkerGroup.h. References SctService::WorkerGroup< T >::getSleepTime(), and SctService::WorkerGroup< T >::wait(). |
|
To be overriden! Should actually do something with the data!
Referenced by SctService::WorkerGroup< T >::popAndWork(). |
|
Definition at line 153 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::go(). |
|
does not execute work() if true
Definition at line 148 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::setPaused(), and SctService::WorkerGroup< DataType >::WorkerGroup(). |
|
Definition at line 141 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::pop(), SctService::WorkerGroup< T >::popAndWork(), SctService::WorkerGroup< T >::push(), and SctService::WorkerGroup< T >::queueSize(). |
|
queueLock
Definition at line 151 of file WorkerGroup.h. |
|
if false, threads are to stop.
Definition at line 147 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::stop(), and SctService::WorkerGroup< DataType >::WorkerGroup(). |
|
time to sleep if queue is empty
Definition at line 149 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< DataType >::getSleepTime(), SctService::WorkerGroup< T >::setSleepTime(), and SctService::WorkerGroup< DataType >::WorkerGroup(). |
|
boost thread group from which threads can be created
Definition at line 145 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::go(), and SctService::WorkerGroup< T >::join(). |
|
vectorLock
Definition at line 152 of file WorkerGroup.h. |
|
Definition at line 135 of file WorkerGroup.h. Referenced by SctService::WorkerGroup< T >::addWorker(), SctService::WorkerGroup< T >::busy(), SctService::WorkerGroup< T >::nWorkers(), and SctService::WorkerGroup< T >::paused(). |