Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
Ogre::DefaultWorkQueue Class Reference

Implementation of a general purpose request / response style background work queue. More...

#include <OgreDefaultWorkQueueStandard.h>

Inheritance diagram for Ogre::DefaultWorkQueue:
Inheritance graph
[legend]

List of all members.

Public Types

typedef unsigned long long int RequestID
 Numeric identifier for a request.

Public Member Functions

 DefaultWorkQueue (const String &name=StringUtil::BLANK)
 DefaultWorkQueue (const String &name=StringUtil::BLANK)
virtual ~DefaultWorkQueue ()
virtual ~DefaultWorkQueue ()
virtual void _processNextRequest ()
 Process the next request on the queue.
void _registerThreadWithRenderSystem ()
 Register the current thread with the rendersystem.
virtual void _threadMain ()
 Main function for each thread spawned.
virtual void _threadMain ()
 Process the next request on the queue.
virtual void abortAllRequests ()
virtual void abortPendingRequestsByChannel (uint16 channel)
virtual void abortRequest (RequestID id)
virtual void abortRequestsByChannel (uint16 channel)
virtual RequestID addRequest (uint16 channel, uint16 requestType, const Any &rData, uint8 retryCount=0, bool forceSynchronous=false, bool idleThread=false)
virtual void addRequestHandler (uint16 channel, RequestHandler *rh)
virtual void addResponseHandler (uint16 channel, ResponseHandler *rh)
virtual uint16 getChannel (const String &channelName)
 Get a channel ID for a given channel name.
const StringgetName () const
 Get the name of the work queue.
virtual bool getRequestsAccepted () const
virtual unsigned long getResponseProcessingTimeLimit () const
virtual bool getWorkersCanAccessRenderSystem () const
 Get whether worker threads will be allowed to access render system resources.
virtual size_t getWorkerThreadCount () const
 Get the number of worker threads that this queue will start when startup() is called.
virtual bool isPaused () const
virtual bool isShuttingDown () const
 Returns whether the queue is trying to shut down.
void operator delete (void *ptr)
void operator delete (void *ptr, void *)
void operator delete (void *ptr, const char *, int, const char *)
void operator delete[] (void *ptr)
void operator delete[] (void *ptr, const char *, int, const char *)
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info
void * operator new (size_t sz)
void * operator new (size_t sz, void *ptr)
 placement operator new
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info
void * operator new[] (size_t sz)
virtual void processResponses ()
virtual void removeRequestHandler (uint16 channel, RequestHandler *rh)
virtual void removeResponseHandler (uint16 channel, ResponseHandler *rh)
virtual void setPaused (bool pause)
virtual void setRequestsAccepted (bool accept)
virtual void setResponseProcessingTimeLimit (unsigned long ms)
virtual void setWorkersCanAccessRenderSystem (bool access)
 Set whether worker threads will be allowed to access render system resources.
virtual void setWorkerThreadCount (size_t c)
 Set the number of worker threads that this queue will start when startup() is called (default 1).
virtual void shutdown ()
virtual void shutdown ()
virtual void startup (bool forceRestart=true)
virtual void startup (bool forceRestart=true)

Protected Types

typedef map< String, uint16 >::type ChannelMap
typedef SharedPtr
< RequestHandlerHolder
RequestHandlerHolderPtr
typedef list
< RequestHandlerHolderPtr >
::type 
RequestHandlerList
typedef map< uint16,
RequestHandlerList >::type 
RequestHandlerListByChannel
typedef deque< Request * >::type RequestQueue
typedef list< ResponseHandler * >
::type 
ResponseHandlerList
typedef map< uint16,
ResponseHandlerList >::type 
ResponseHandlerListByChannel
typedef deque< Response * >::type ResponseQueue

Protected Member Functions

void addRequestWithRID (RequestID rid, uint16 channel, uint16 requestType, const Any &rData, uint8 retryCount)
 Put a Request on the queue with a specific RequestID.
virtual void notifyThreadRegistered ()
 Notify that a thread has registered itself with the render system.
virtual void notifyWorkers ()
 Notify workers about a new request.
virtual void notifyWorkers ()
 Notify workers about a new request.
 OGRE_MUTEX (mInitMutex)
 Init notification mutex (must lock before waiting on initCondition)
 OGRE_MUTEX (mChannelMapMutex)
 OGRE_MUTEX (mIdleMutex)
 OGRE_MUTEX (mRequestMutex)
 OGRE_MUTEX (mProcessMutex)
 OGRE_MUTEX (mResponseMutex)
 OGRE_RW_MUTEX (mRequestHandlerMutex)
 OGRE_THREAD_SYNCHRONISER (mInitSync)
 Synchroniser token to wait / notify on thread init.
 OGRE_THREAD_SYNCHRONISER (mRequestCondition)
bool processIdleRequests ()
ResponseprocessRequest (Request *r)
void processRequestResponse (Request *r, bool synchronous)
void processResponse (Response *r)
virtual void waitForNextRequest ()
 To be called by a separate thread; will return immediately if there are items in the queue, or suspend the thread until new items are added otherwise.

Protected Attributes

bool mAcceptRequests
ChannelMap mChannelMap
RequestmIdleProcessed
RequestQueue mIdleRequestQueue
bool mIdleThreadRunning
bool mIsRunning
String mName
uint16 mNextChannel
size_t mNumThreadsRegisteredWithRS
bool mPaused
RequestQueue mProcessQueue
RequestID mRequestCount
RequestHandlerListByChannel mRequestHandlers
RequestQueue mRequestQueue
ResponseHandlerListByChannel mResponseHandlers
ResponseQueue mResponseQueue
unsigned long mResposeTimeLimitMS
bool mShuttingDown
WorkerFunc * mWorkerFunc
bool mWorkerRenderSystemAccess
size_t mWorkerThreadCount

Private Member Functions

 OGRE_MUTEX (mRegisterRSMutex)
 Synchronise registering threads with the RenderSystem.

Private Attributes

std::set< tbb::tbb_thread::id > mRegisteredThreads
tbb::task_group mTaskGroup
tbb::task_scheduler_init mTaskScheduler

Detailed Description

Implementation of a general purpose request / response style background work queue.

Remarks:
This default implementation of a work queue starts a thread pool and provides queues to process requests.
This implementation utilises tbb's task system for the WorkQueue implementation.

Definition at line 38 of file OgreDefaultWorkQueueStandard.h.


Member Typedef Documentation

typedef map<String, uint16>::type Ogre::WorkQueue::ChannelMap [protected, inherited]

Definition at line 73 of file OgreWorkQueue.h.

Definition at line 534 of file OgreWorkQueue.h.

Definition at line 536 of file OgreWorkQueue.h.

Definition at line 538 of file OgreWorkQueue.h.

typedef unsigned long long int Ogre::WorkQueue::RequestID [inherited]

Numeric identifier for a request.

Definition at line 79 of file OgreWorkQueue.h.

typedef deque<Request*>::type Ogre::DefaultWorkQueueBase::RequestQueue [protected, inherited]

Definition at line 465 of file OgreWorkQueue.h.

Definition at line 537 of file OgreWorkQueue.h.

Definition at line 539 of file OgreWorkQueue.h.

typedef deque<Response*>::type Ogre::DefaultWorkQueueBase::ResponseQueue [protected, inherited]

Definition at line 466 of file OgreWorkQueue.h.


Constructor & Destructor Documentation


Member Function Documentation

virtual void Ogre::DefaultWorkQueueBase::_processNextRequest ( ) [virtual, inherited]

Process the next request on the queue.

Remarks:
This method is public, but only intended for advanced users to call. The only reason you would call this, is if you were using your own thread to drive the worker processing. The thread calling this method will be the thread used to call the RequestHandler.

Register the current thread with the rendersystem.

virtual void Ogre::DefaultWorkQueue::_threadMain ( ) [virtual]

Main function for each thread spawned.

Implements Ogre::DefaultWorkQueueBase.

virtual void Ogre::DefaultWorkQueue::_threadMain ( ) [virtual]

Process the next request on the queue.

Remarks:
This method is public, but only intended for advanced users to call. The only reason you would call this, is if you were using your own thread to drive the worker processing. The thread calling this method will be the thread used to call the RequestHandler. Main function for each thread spawned.

Implements Ogre::DefaultWorkQueueBase.

virtual void Ogre::DefaultWorkQueueBase::abortAllRequests ( ) [virtual, inherited]

Abort all previously issued requests.

Any requests still waiting to be processed will be removed from the queue. Any requests that are being processed will still complete.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::abortPendingRequestsByChannel ( uint16  channel) [virtual, inherited]

Abort all previously issued requests in a given channel.

Any requests still waiting to be processed of the given channel, will be removed from the queue. It will not remove requests, where the request handler is already called.

Parameters:
channelThe type of request to be aborted

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::abortRequest ( RequestID  id) [virtual, inherited]

Abort a previously issued request.

If the request is still waiting to be processed, it will be removed from the queue.

Parameters:
idThe ID of the previously issued request.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::abortRequestsByChannel ( uint16  channel) [virtual, inherited]

Abort all previously issued requests in a given channel.

Any requests still waiting to be processed of the given channel, will be removed from the queue. Requests which are processed, but response handler is not called will also be removed.

Parameters:
channelThe type of request to be aborted

Implements Ogre::WorkQueue.

virtual RequestID Ogre::DefaultWorkQueueBase::addRequest ( uint16  channel,
uint16  requestType,
const Any rData,
uint8  retryCount = 0,
bool  forceSynchronous = false,
bool  idleThread = false 
) [virtual, inherited]

Add a new request to the queue.

Parameters:
channelThe channel this request will go into = 0; the channel is the top-level categorisation of the request
requestTypeAn identifier that's unique within this queue which identifies the type of the request (user decides the actual value)
rDataThe data required by the request process.
retryCountThe number of times the request should be retried if it fails.
forceSynchronousForces the request to be processed immediately even if threading is enabled.
idleThreadRequest should be processed on the idle thread. Idle requests will be processed on a single worker thread. You should use this in the following situations: 1. If a request handler can't process multiple requests in parallel. 2. If you add lot of requests, but you want to keep the game fast. 3. If you have lot of more important threads. (example: physics).
Returns:
The ID of the request that has been added

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::addRequestHandler ( uint16  channel,
RequestHandler rh 
) [virtual, inherited]

Add a request handler instance to the queue.

Remarks:
Every queue must have at least one request handler instance for each channel in which requests are raised. If you add more than one handler per channel, then you must implement canHandleRequest differently in each if you wish them to respond to different requests.
Parameters:
channelThe channel for requests you want to handle
rhYour handler

Implements Ogre::WorkQueue.

void Ogre::DefaultWorkQueueBase::addRequestWithRID ( RequestID  rid,
uint16  channel,
uint16  requestType,
const Any rData,
uint8  retryCount 
) [protected, inherited]

Put a Request on the queue with a specific RequestID.

virtual void Ogre::DefaultWorkQueueBase::addResponseHandler ( uint16  channel,
ResponseHandler rh 
) [virtual, inherited]

Add a response handler instance to the queue.

Remarks:
Every queue must have at least one response handler instance for each channel in which requests are raised. If you add more than one, then you must implement canHandleResponse differently in each if you wish them to respond to different responses.
Parameters:
channelThe channel for responses you want to handle
rhYour handler

Implements Ogre::WorkQueue.

virtual uint16 Ogre::WorkQueue::getChannel ( const String channelName) [virtual, inherited]

Get a channel ID for a given channel name.

Remarks:
Channels are assigned on a first-come, first-served basis and are not persistent across application instances. This method allows applications to not worry about channel clashes through manually assigned channel numbers.
const String& Ogre::DefaultWorkQueueBase::getName ( ) const [inherited]

Get the name of the work queue.

virtual bool Ogre::DefaultWorkQueueBase::getRequestsAccepted ( ) const [virtual, inherited]

Returns whether requests are being accepted right now.

Implements Ogre::WorkQueue.

virtual unsigned long Ogre::DefaultWorkQueueBase::getResponseProcessingTimeLimit ( ) const [virtual, inherited]

Get the time limit imposed on the processing of responses in a single frame, in milliseconds (0 indicates no limit).

Implements Ogre::WorkQueue.

Definition at line 455 of file OgreWorkQueue.h.

virtual bool Ogre::DefaultWorkQueueBase::getWorkersCanAccessRenderSystem ( ) const [virtual, inherited]

Get whether worker threads will be allowed to access render system resources.

Accessing render system resources from a separate thread can require that a context is maintained for that thread. Also, it requires that the render system is running in threadsafe mode, which only happens when OGRE_THREAD_SUPPORT=1. This option defaults to false, which means that threads can not use GPU resources, and the render system can work in non-threadsafe mode, which is more efficient.

virtual size_t Ogre::DefaultWorkQueueBase::getWorkerThreadCount ( ) const [virtual, inherited]

Get the number of worker threads that this queue will start when startup() is called.

virtual bool Ogre::DefaultWorkQueueBase::isPaused ( ) const [virtual, inherited]

Return whether the queue is paused ie not sending more work to workers.

Implements Ogre::WorkQueue.

virtual bool Ogre::DefaultWorkQueueBase::isShuttingDown ( ) const [virtual, inherited]

Returns whether the queue is trying to shut down.

Definition at line 422 of file OgreWorkQueue.h.

virtual void Ogre::DefaultWorkQueue::notifyThreadRegistered ( ) [protected, virtual]

Notify that a thread has registered itself with the render system.

virtual void Ogre::DefaultWorkQueue::notifyWorkers ( ) [protected, virtual]

Notify workers about a new request.

Implements Ogre::DefaultWorkQueueBase.

virtual void Ogre::DefaultWorkQueue::notifyWorkers ( ) [protected, virtual]

Notify workers about a new request.

Implements Ogre::DefaultWorkQueueBase.

Ogre::DefaultWorkQueue::OGRE_MUTEX ( mInitMutex  ) [protected]

Init notification mutex (must lock before waiting on initCondition)

Ogre::DefaultWorkQueue::OGRE_MUTEX ( mRegisterRSMutex  ) [private]

Synchronise registering threads with the RenderSystem.

Ogre::WorkQueue::OGRE_MUTEX ( mChannelMapMutex  ) [protected, inherited]
Ogre::DefaultWorkQueueBase::OGRE_MUTEX ( mIdleMutex  ) [protected, inherited]
Ogre::DefaultWorkQueueBase::OGRE_MUTEX ( mRequestMutex  ) [protected, inherited]
Ogre::DefaultWorkQueueBase::OGRE_MUTEX ( mProcessMutex  ) [protected, inherited]
Ogre::DefaultWorkQueueBase::OGRE_MUTEX ( mResponseMutex  ) [protected, inherited]
Ogre::DefaultWorkQueueBase::OGRE_RW_MUTEX ( mRequestHandlerMutex  ) [protected, inherited]

Synchroniser token to wait / notify on thread init.

Ogre::DefaultWorkQueue::OGRE_THREAD_SYNCHRONISER ( mRequestCondition  ) [protected]
template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr) [inherited]

Definition at line 96 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
) [inherited]

Definition at line 102 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
) [inherited]

Definition at line 108 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr) [inherited]

Definition at line 113 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
) [inherited]

Definition at line 119 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
) [inherited]

operator new, with debug line info

Definition at line 68 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz) [inherited]

Definition at line 73 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
) [inherited]

placement operator new

Definition at line 79 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
) [inherited]

array operator new, with debug line info

Definition at line 86 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz) [inherited]

Definition at line 91 of file OgreMemoryAllocatedObject.h.

bool Ogre::DefaultWorkQueueBase::processIdleRequests ( ) [protected, inherited]
Response* Ogre::DefaultWorkQueueBase::processRequest ( Request *  r) [protected, inherited]
void Ogre::DefaultWorkQueueBase::processRequestResponse ( Request *  r,
bool  synchronous 
) [protected, inherited]
void Ogre::DefaultWorkQueueBase::processResponse ( Response r) [protected, inherited]
virtual void Ogre::DefaultWorkQueueBase::processResponses ( ) [virtual, inherited]

Process the responses in the queue.

Remarks:
This method is public, and must be called from the main render thread to 'pump' responses through the system. The method will usually try to clear all responses before returning = 0; however, you can specify a time limit on the response processing to limit the impact of spikes in demand by calling setResponseProcessingTimeLimit.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::removeRequestHandler ( uint16  channel,
RequestHandler rh 
) [virtual, inherited]

Remove a request handler.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::removeResponseHandler ( uint16  channel,
ResponseHandler rh 
) [virtual, inherited]

Remove a Response handler.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::setPaused ( bool  pause) [virtual, inherited]

Set whether to pause further processing of any requests.

If true, any further requests will simply be queued and not processed until setPaused(false) is called. Any requests which are in the process of being worked on already will still continue.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::setRequestsAccepted ( bool  accept) [virtual, inherited]

Set whether to accept new requests or not.

If true, requests are added to the queue as usual. If false, requests are silently ignored until setRequestsAccepted(true) is called.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueueBase::setResponseProcessingTimeLimit ( unsigned long  ms) [virtual, inherited]

Set the time limit imposed on the processing of responses in a single frame, in milliseconds (0 indicates no limit).

This sets the maximum time that will be spent in processResponses() in a single frame. The default is 8ms.

Implements Ogre::WorkQueue.

Definition at line 457 of file OgreWorkQueue.h.

virtual void Ogre::DefaultWorkQueueBase::setWorkersCanAccessRenderSystem ( bool  access) [virtual, inherited]

Set whether worker threads will be allowed to access render system resources.

Accessing render system resources from a separate thread can require that a context is maintained for that thread. Also, it requires that the render system is running in threadsafe mode, which only happens when OGRE_THREAD_SUPPORT=1. This option defaults to false, which means that threads can not use GPU resources, and the render system can work in non-threadsafe mode, which is more efficient. Calling this will have no effect unless the queue is shut down and restarted.

virtual void Ogre::DefaultWorkQueueBase::setWorkerThreadCount ( size_t  c) [virtual, inherited]

Set the number of worker threads that this queue will start when startup() is called (default 1).

Calling this will have no effect unless the queue is shut down and restarted.

virtual void Ogre::DefaultWorkQueue::shutdown ( ) [virtual]

Shut down the queue.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueue::shutdown ( ) [virtual]

Shut down the queue.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueue::startup ( bool  forceRestart = true) [virtual]

Start up the queue with the options that have been set.

Parameters:
forceRestartIf the queue is already running, whether to shut it down and restart.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueue::startup ( bool  forceRestart = true) [virtual]

Start up the queue with the options that have been set.

Parameters:
forceRestartIf the queue is already running, whether to shut it down and restart.

Implements Ogre::WorkQueue.

virtual void Ogre::DefaultWorkQueue::waitForNextRequest ( ) [protected, virtual]

To be called by a separate thread; will return immediately if there are items in the queue, or suspend the thread until new items are added otherwise.


Member Data Documentation

bool Ogre::DefaultWorkQueueBase::mAcceptRequests [protected, inherited]

Definition at line 545 of file OgreWorkQueue.h.

ChannelMap Ogre::WorkQueue::mChannelMap [protected, inherited]

Definition at line 74 of file OgreWorkQueue.h.

Definition at line 569 of file OgreWorkQueue.h.

Definition at line 567 of file OgreWorkQueue.h.

Definition at line 568 of file OgreWorkQueue.h.

bool Ogre::DefaultWorkQueueBase::mIsRunning [protected, inherited]

Definition at line 462 of file OgreWorkQueue.h.

String Ogre::DefaultWorkQueueBase::mName [protected, inherited]

Definition at line 459 of file OgreWorkQueue.h.

uint16 Ogre::WorkQueue::mNextChannel [protected, inherited]

Definition at line 75 of file OgreWorkQueue.h.

Definition at line 66 of file OgreDefaultWorkQueueStandard.h.

bool Ogre::DefaultWorkQueueBase::mPaused [protected, inherited]

Definition at line 544 of file OgreWorkQueue.h.

Definition at line 468 of file OgreWorkQueue.h.

std::set<tbb::tbb_thread::id> Ogre::DefaultWorkQueue::mRegisteredThreads [private]

Definition at line 71 of file OgreDefaultWorkQueueTBB.h.

Definition at line 543 of file OgreWorkQueue.h.

Definition at line 541 of file OgreWorkQueue.h.

Definition at line 467 of file OgreWorkQueue.h.

Definition at line 542 of file OgreWorkQueue.h.

Definition at line 469 of file OgreWorkQueue.h.

unsigned long Ogre::DefaultWorkQueueBase::mResposeTimeLimitMS [protected, inherited]

Definition at line 463 of file OgreWorkQueue.h.

bool Ogre::DefaultWorkQueueBase::mShuttingDown [protected, inherited]

Definition at line 546 of file OgreWorkQueue.h.

tbb::task_group Ogre::DefaultWorkQueue::mTaskGroup [private]

Definition at line 68 of file OgreDefaultWorkQueueTBB.h.

tbb::task_scheduler_init Ogre::DefaultWorkQueue::mTaskScheduler [private]

Definition at line 67 of file OgreDefaultWorkQueueTBB.h.

WorkerFunc* Ogre::DefaultWorkQueueBase::mWorkerFunc [protected, inherited]

Definition at line 485 of file OgreWorkQueue.h.

Definition at line 461 of file OgreWorkQueue.h.

size_t Ogre::DefaultWorkQueueBase::mWorkerThreadCount [protected, inherited]

Definition at line 460 of file OgreWorkQueue.h.


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

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:41:00