TracktionEngine
|
Base class for thread pools which can be customised to determine how cooperative threads should behave. More...
#include <tracktion_LockFreeMultiThreadedNodePlayer.h>
Public Member Functions | |
ThreadPool (LockFreeMultiThreadedNodePlayer &p) | |
Constructs a ThreadPool for a given LockFreeMultiThreadedNodePlayer. | |
virtual | ~ThreadPool ()=default |
Destructor. | |
virtual void | createThreads (size_t numThreads, juce::AudioWorkgroup)=0 |
Subclasses should implement this to create the given number of threads. | |
virtual void | clearThreads ()=0 |
Subclasses should implement this to clear all the threads. | |
virtual void | signalOne ()=0 |
Called by the player when a Node becomes available to process. | |
virtual void | signal (int numToSignal)=0 |
Called by the player when more than one Node becomes available to process. | |
virtual void | signalAll ()=0 |
Called by the player when more than one Node becomes available to process. | |
virtual void | waitForFinalNode ()=0 |
Called by the player when the audio thread has no free Nodes to process. | |
void | signalShouldExit () |
Signals the pool that all the threads should exit. | |
void | resetExitSignal () |
Signals the pool that all the threads should continue to run and not exit. | |
bool | shouldExit () const |
Returns true if all the threads should exit. | |
bool | shouldWait () |
Returns true if there are no free Nodes to be processed and the calling thread should wait until there are Nodes ready. | |
bool | isFinalNodeReady () |
Returns true if all the Nodes have been processed. | |
bool | process () |
Process the next chain of Nodes. | |
void | setCurrentNode (LockFreeMultiThreadedNodePlayer::PreparedNode *nodeInUse) |
Sets the current PreparedNode in use. | |
Public Attributes | |
LockFreeMultiThreadedNodePlayer & | player |
Base class for thread pools which can be customised to determine how cooperative threads should behave.
tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::ThreadPool | ( | LockFreeMultiThreadedNodePlayer & | p | ) |
Constructs a ThreadPool for a given LockFreeMultiThreadedNodePlayer.
|
virtualdefault |
Destructor.
|
pure virtual |
Subclasses should implement this to create the given number of threads.
|
pure virtual |
Subclasses should implement this to clear all the threads.
|
pure virtual |
Called by the player when a Node becomes available to process.
Subclasses should use this to try and get a thread to call process as soon as possible.
|
pure virtual |
Called by the player when more than one Node becomes available to process.
Subclasses should use this to try and get a thread to call process as soon as possible.
|
pure virtual |
Called by the player when more than one Node becomes available to process.
Subclasses should use this to try and get a thread to call process as soon as possible.
Referenced by signalShouldExit().
|
pure virtual |
Called by the player when the audio thread has no free Nodes to process.
Subclasses should can use this to either spin, pause or wait until a Node does become free or isFinalNodeReady returns true.
void tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::signalShouldExit | ( | ) |
Signals the pool that all the threads should exit.
References signalAll().
void tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::resetExitSignal | ( | ) |
Signals the pool that all the threads should continue to run and not exit.
bool tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::shouldExit | ( | ) | const |
Returns true if all the threads should exit.
Referenced by setCurrentNode(), and shouldWait().
bool tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::shouldWait | ( | ) |
Returns true if there are no free Nodes to be processed and the calling thread should wait until there are Nodes ready.
References player, and shouldExit().
bool tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::isFinalNodeReady | ( | ) |
Returns true if all the Nodes have been processed.
bool tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::process | ( | ) |
void tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::setCurrentNode | ( | LockFreeMultiThreadedNodePlayer::PreparedNode * | nodeInUse | ) |
Sets the current PreparedNode in use.
This should live as long as the threads are running once set.
References shouldExit().
LockFreeMultiThreadedNodePlayer& tracktion::graph::LockFreeMultiThreadedNodePlayer::ThreadPool::player |
Referenced by process(), and shouldWait().