JUCE  v5.1.1-3-g1a0b28c73
JUCE API
ThreadPoolJob Class Referenceabstract

A task that is executed by a ThreadPool object. More...

#include <juce_ThreadPool.h>

Collaboration diagram for ThreadPoolJob:

Public Types

enum  JobStatus {
  jobHasFinished = 0,
  jobNeedsRunningAgain
}
 These are the values that can be returned by the runJob() method. More...
 

Public Member Functions

 ThreadPoolJob (const String &name)
 Creates a thread pool job object. More...
 
virtual ~ThreadPoolJob ()
 Destructor. More...
 
String getJobName () const
 Returns the name of this job. More...
 
bool isRunning () const noexcept
 Returns true if this job is currently running its runJob() method. More...
 
virtual JobStatus runJob ()=0
 Peforms the actual work that this job needs to do. More...
 
void setJobName (const String &newName)
 Changes the job's name. More...
 
bool shouldExit () const noexcept
 Returns true if something is trying to interrupt this job and make it stop. More...
 
void signalJobShouldExit ()
 Calling this will cause the shouldExit() method to return true, and the job should (if it's been implemented correctly) stop as soon as possible. More...
 

Static Public Member Functions

static ThreadPoolJobgetCurrentThreadPoolJob ()
 If the calling thread is being invoked inside a runJob() method, this will return the ThreadPoolJob that it belongs to. More...
 

Private Attributes

bool isActive
 
String jobName
 
ThreadPoolpool
 
bool shouldBeDeleted
 
bool shouldStop
 

Friends

class ThreadPool
 
class ThreadPoolThread
 

Detailed Description

A task that is executed by a ThreadPool object.

A ThreadPool keeps a list of ThreadPoolJob objects which are executed by its threads.

The runJob() method needs to be implemented to do the task, and if the code that does the work takes a significant time to run, it must keep checking the shouldExit() method to see if something is trying to interrupt the job. If shouldExit() returns true, the runJob() method must return immediately.

See also
ThreadPool, Thread

Member Enumeration Documentation

◆ JobStatus

These are the values that can be returned by the runJob() method.

Enumerator
jobHasFinished 

indicates that the job has finished and can be removed from the pool.

jobNeedsRunningAgain 

indicates that the job would like to be called again when a thread is free.

Constructor & Destructor Documentation

◆ ThreadPoolJob()

ThreadPoolJob::ThreadPoolJob ( const String name)
explicit

Creates a thread pool job object.

After creating your job, add it to a thread pool with ThreadPool::addJob().

◆ ~ThreadPoolJob()

virtual ThreadPoolJob::~ThreadPoolJob ( )
virtual

Destructor.

Member Function Documentation

◆ getCurrentThreadPoolJob()

static ThreadPoolJob* ThreadPoolJob::getCurrentThreadPoolJob ( )
static

If the calling thread is being invoked inside a runJob() method, this will return the ThreadPoolJob that it belongs to.

◆ getJobName()

String ThreadPoolJob::getJobName ( ) const

Returns the name of this job.

See also
setJobName

◆ isRunning()

bool ThreadPoolJob::isRunning ( ) const
inlinenoexcept

Returns true if this job is currently running its runJob() method.

◆ runJob()

virtual JobStatus ThreadPoolJob::runJob ( )
pure virtual

Peforms the actual work that this job needs to do.

Your subclass must implement this method, in which is does its work.

If the code in this method takes a significant time to run, it must repeatedly check the shouldExit() method to see if something is trying to interrupt the job. If shouldExit() ever returns true, the runJob() method must return immediately.

If this method returns jobHasFinished, then the job will be removed from the pool immediately. If it returns jobNeedsRunningAgain, then the job will be left in the pool and will get a chance to run again as soon as a thread is free.

See also
shouldExit()

◆ setJobName()

void ThreadPoolJob::setJobName ( const String newName)

Changes the job's name.

See also
getJobName

◆ shouldExit()

bool ThreadPoolJob::shouldExit ( ) const
inlinenoexcept

Returns true if something is trying to interrupt this job and make it stop.

Your runJob() method must call this whenever it gets a chance, and if it ever returns true, the runJob() method must return immediately.

See also
signalJobShouldExit()

◆ signalJobShouldExit()

void ThreadPoolJob::signalJobShouldExit ( )

Calling this will cause the shouldExit() method to return true, and the job should (if it's been implemented correctly) stop as soon as possible.

See also
shouldExit()

Friends And Related Function Documentation

◆ ThreadPool

friend class ThreadPool
friend

◆ ThreadPoolThread

friend class ThreadPoolThread
friend

Member Data Documentation

◆ isActive

bool ThreadPoolJob::isActive
private

◆ jobName

String ThreadPoolJob::jobName
private

◆ pool

ThreadPool* ThreadPoolJob::pool
private

◆ shouldBeDeleted

bool ThreadPoolJob::shouldBeDeleted
private

◆ shouldStop

bool ThreadPoolJob::shouldStop
private

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