JUCE

- Main Page
- Related Pages
- Topics
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
AudioWorkgroup Class Reference
juce_audio_basics » utilities

A handle to an audio workgroup, which is a collection of realtime threads working together to produce audio by a common deadline. More...

`#include <juce_AudioWorkgroup.h>`

## Public Types
using | Erased = FixedSizeFunction<64, const WorkgroupProvider*()>

## Public Member Functions
| AudioWorkgroup (Erased e)
| AudioWorkgroup (AudioWorkgroup &&)=default
| Move constructor.
AudioWorkgroup & | operator= (AudioWorkgroup &&)=default
| Move assignment operator.
| AudioWorkgroup (const AudioWorkgroup &)
| Copy constructor.
AudioWorkgroup & | operator= (const AudioWorkgroup &other)
| Copy assignment operator.
| AudioWorkgroup ()=default
| Constructs a disengaged handle that does not represent any workgroup.
void | join (WorkgroupToken &token) const
| This method attempts to join the calling thread to this workgroup.
bool | operator== (const AudioWorkgroup &other) const
| Equality operator.
bool | operator!= (const AudioWorkgroup &other) const
| Inequality operator.
| operator bool () const
| Returns true if and only if this object represents a workgroup.
void | reset ()
| Disengages this instance so that it no longer represents a workgroup.
size_t | getMaxParallelThreadCount () const
| Returns the recommended maximum number of parallel threads that should join this workgroup.

## Detailed Description

A handle to an audio workgroup, which is a collection of realtime threads working together to produce audio by a common deadline.

You can use this class to join a real-time worker thread to a workgroup. Rather than constructing instances of this class directly, you should use functions like AudioProcessor::audioWorkgroupContextChanged() and AudioIODevice::getWorkgroup() to fetch an engaged workgroup from the system.

The class contains a single method, join(). Call this from your real-time thread to with register this workgroup.

Here's an example of how you might use this class:

Constructor()
{
startRealtimeThread (RealtimeThreadOptions{}.withApproximateAudioProcessingTime (samplesPerFrame, sampleRate));
or
startRealtimeThread (RealtimeThreadOptions{}.withProcessingTimeMs (10));
}
void Thread::run() override
{
WorkgroupToken token;
getWorkgroup().join (token);
while (wait (-1) && ! threadShouldExit())
{
// If the workgroup has changed, rejoin the workgroup with the same token.
if (workgroupChanged())
getWorkgroup().join (token);
// Perform the work here
}
}
void AudioProcessor::processBlock()
{
workerThread->notify();
}
AudioProcessor::processBlock
virtual void processBlock(AudioBuffer< float > &buffer, MidiBuffer &midiMessages)=0
Renders the next block.
Thread::run
virtual void run()=0
Must be implemented to perform the thread's actual code.
WorkgroupToken
Created by AudioWorkgroup to join the calling thread to a workgroup.
Definition juce_AudioWorkgroup.h:37

See also
  Thread, AudioProcessor, WorkgroupToken

## Member Typedef Documentation

## ◆ Erased

using AudioWorkgroup::Erased = FixedSizeFunction<64, const WorkgroupProvider*()>

## Constructor & Destructor Documentation

## ◆ AudioWorkgroup() [1/4]

AudioWorkgroup::AudioWorkgroup | ( | Erased | e | ) |
| explicit

## ◆ AudioWorkgroup() [2/4]

AudioWorkgroup::AudioWorkgroup | ( | AudioWorkgroup && |  | ) |
| default

Move constructor.

## ◆ AudioWorkgroup() [3/4]

AudioWorkgroup::AudioWorkgroup | ( | const AudioWorkgroup & |  | ) |

Copy constructor.

## ◆ AudioWorkgroup() [4/4]

AudioWorkgroup::AudioWorkgroup | ( |  | ) |
| default

Constructs a disengaged handle that does not represent any workgroup.

## Member Function Documentation

## ◆ operator=() [1/2]

AudioWorkgroup & AudioWorkgroup::operator= | ( | AudioWorkgroup && |  | ) |
| default

Move assignment operator.

## ◆ operator=() [2/2]

AudioWorkgroup & AudioWorkgroup::operator= | ( | const AudioWorkgroup & | other | ) |

Copy assignment operator.

## ◆ join()

void AudioWorkgroup::join | ( | WorkgroupToken & | token | ) | const

This method attempts to join the calling thread to this workgroup.

If the join operation is successful, the token will be engaged, i.e. its getTokenProvider() function will return non-null.

If the token is already engaged and represents a join to another workgroup, the thread will leave that workgroup before joining the workgroup represented by this object. If the 'token' is already engaged and is passed to the same workgroup, the method will not perform any action.

It's important to note that the lifetime of the token should not exceed the lifetime of the associated thread and must be destroyed on the same thread.

## ◆ operator==()

bool AudioWorkgroup::operator== | ( | const AudioWorkgroup & | other | ) | const

Equality operator.

Referenced by operator!=().

## ◆ operator!=()

bool AudioWorkgroup::operator!= | ( | const AudioWorkgroup & | other | ) | const

Inequality operator.

References operator==().

## ◆ operator bool()

AudioWorkgroup::operator bool | ( |  | ) | const
| explicit

Returns true if and only if this object represents a workgroup.

## ◆ reset()

void AudioWorkgroup::reset | ( |  | ) |

Disengages this instance so that it no longer represents a workgroup.

After this call, operator bool() will return false.

## ◆ getMaxParallelThreadCount()

size_t AudioWorkgroup::getMaxParallelThreadCount | ( |  | ) | const

Returns the recommended maximum number of parallel threads that should join this workgroup.

This recommendation is based on the workgroup attributes and current hardware, but not on system load. On a very busy system, it may be more effective to use fewer parallel threads.

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

- juce_AudioWorkgroup.h