A threadsafe, pointer-passing queue (First-In First-Out) implementation for the sound system.
More...
Public Member Functions |
void | Clear () |
| Clear all entries in the queue.
|
T * | DequeueEntry (bool bWait=false) |
| Dequeue an entry from the queue.
|
bool | Find (T *data) |
| Compares pointers, and not the objects they point to.
|
bool | GetClosed () |
| This can be used to determine if the queue is closed.
|
bool | GetDupecheck () |
| Retrieve the status of duplicate pointer checking.
|
QueueIterator< T > * | GetIterator () |
| Retrieve an iterator over this queue.
|
size_t | Length () |
| Retrieve the number of entries in the queue.
|
| Queue () |
| Queue construction requires no parameters.
|
QueueErrorType | QueueEntry (T *pData) |
| Add the specified pointer to the end of the queue.
|
void | SetClosed (bool Closed) |
| Close the queue so that no further entries may be added.
|
void | SetDupecheck (bool Check) |
| Turn on/off duplicate entry pointer checking.
|
Protected Attributes |
volatile bool | m_bClosed |
| Flag indicating whether new entries may be added to this queue.
|
volatile bool | m_bDupeCheck |
| Flag indicating whether the same pointer may exist multiple times in this queue.
|
size_t | m_EntryCount |
| Number of entries currently in the queue.
|
CS::Threading::RecursiveMutex | m_pAccessMutex |
| The mutex which restricts access to all queue operations.
|
CS::Threading::Condition | m_pEntryReadyCondition |
| The condition used for waiting on and signaling availability of entries.
|
QEntry< T > * | m_pHead |
| Pointer to the oldest entry in the queue.
|
QEntry< T > * | m_pTail |
| Pointer to the newest entry in the queue.
|
template<typename T>
class CS::SndSys::Queue< T >
A threadsafe, pointer-passing queue (First-In First-Out) implementation for the sound system.
- Warning:
- csRef<> is not threadsafe, and csPtr<> doesn't let us do anything with the object referenced inside so this class, which is specifically designed to communicate between threads, has no choice but to use raw pointers. If this is used to communicate between threads, the 'feeder' thread should incref the object before passing it into the queue. The 'consumer' thread should NOT touch the refcount unless it's certain that no other thread will be touching the refcount. This makes cleanup ... interesting. One possible method for cleanup is for the 'consumer' thread which implicitly holds a single reference (passed from the 'feeder') to wait for the refcount to reach 1 before releasing it's refcount, since a refcount of 1 means that it should have the only reference and thus should be guaranteed to be the only thread working with the refcount. Another possibility is for the 'consumer' thread to queue this object back to the 'feeder' thread (through another queue), which will perform the decref itself.
-
If an object passed through this queue is meant to be accessed from multiple threads at once, the object must contain threadsafe methods itself.
Definition at line 99 of file queue.h.