Jolt Physics
A multi core friendly Game Physics Engine
|
#include <JobSystemThreadPool.h>
Public Types | |
using | InitExitFunction = function< void(int)> |
Functions to call when a thread is initialized or exits, must be set before calling Init() More... | |
Public Types inherited from JobSystem | |
using | JobFunction = function< void()> |
Main function of the job. More... | |
Public Member Functions | |
JPH_OVERRIDE_NEW_DELETE | JobSystemThreadPool (uint inMaxJobs, uint inMaxBarriers, int inNumThreads=-1) |
JobSystemThreadPool ()=default | |
virtual | ~JobSystemThreadPool () override |
void | SetThreadInitFunction (const InitExitFunction &inInitFunction) |
void | SetThreadExitFunction (const InitExitFunction &inExitFunction) |
void | Init (uint inMaxJobs, uint inMaxBarriers, int inNumThreads=-1) |
virtual int | GetMaxConcurrency () const override |
Get maximum number of concurrently executing jobs. More... | |
virtual JobHandle | CreateJob (const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies=0) override |
void | SetNumThreads (int inNumThreads) |
Change the max concurrency after initialization. More... | |
Public Member Functions inherited from JobSystemWithBarrier | |
JPH_OVERRIDE_NEW_DELETE | JobSystemWithBarrier (uint inMaxBarriers) |
JobSystemWithBarrier ()=default | |
virtual | ~JobSystemWithBarrier () override |
void | Init (uint inMaxBarriers) |
virtual Barrier * | CreateBarrier () override |
Create a new barrier, used to wait on jobs. More... | |
virtual void | DestroyBarrier (Barrier *inBarrier) override |
Destroy a barrier when it is no longer used. The barrier should be empty at this point. More... | |
virtual void | WaitForJobs (Barrier *inBarrier) override |
Wait for a set of jobs to be finished, note that only 1 thread can be waiting on a barrier at a time. More... | |
Public Member Functions inherited from JobSystem | |
virtual | ~JobSystem ()=default |
Destructor. More... | |
virtual int | GetMaxConcurrency () const =0 |
Get maximum number of concurrently executing jobs. More... | |
virtual JobHandle | CreateJob (const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies=0)=0 |
virtual Barrier * | CreateBarrier ()=0 |
Create a new barrier, used to wait on jobs. More... | |
virtual void | DestroyBarrier (Barrier *inBarrier)=0 |
Destroy a barrier when it is no longer used. The barrier should be empty at this point. More... | |
virtual void | WaitForJobs (Barrier *inBarrier)=0 |
Wait for a set of jobs to be finished, note that only 1 thread can be waiting on a barrier at a time. More... | |
Public Member Functions inherited from NonCopyable | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
void | operator= (const NonCopyable &)=delete |
Protected Member Functions | |
virtual void | QueueJob (Job *inJob) override |
Adds a job to the job queue. More... | |
virtual void | QueueJobs (Job **inJobs, uint inNumJobs) override |
Adds a number of jobs at once to the job queue. More... | |
virtual void | FreeJob (Job *inJob) override |
Frees a job. More... | |
virtual void | QueueJob (Job *inJob)=0 |
Adds a job to the job queue. More... | |
virtual void | QueueJobs (Job **inJobs, uint inNumJobs)=0 |
Adds a number of jobs at once to the job queue. More... | |
virtual void | FreeJob (Job *inJob)=0 |
Frees a job. More... | |
Implementation of a JobSystem using a thread pool
Note that this is considered an example implementation. It is expected that when you integrate the physics engine into your own project that you'll provide your own implementation of the JobSystem built on top of whatever job system your project uses.
using JobSystemThreadPool::InitExitFunction = function<void(int)> |
Functions to call when a thread is initialized or exits, must be set before calling Init()
JobSystemThreadPool::JobSystemThreadPool | ( | uint | inMaxJobs, |
uint | inMaxBarriers, | ||
int | inNumThreads = -1 |
||
) |
Creates a thread pool.
|
default |
|
overridevirtual |
|
overridevirtual |
Create a new job, the job is started immediately if inNumDependencies == 0 otherwise it starts when RemoveDependency causes the dependency counter to reach 0.
Implements JobSystem.
|
overrideprotectedvirtual |
Frees a job.
Implements JobSystem.
|
inlineoverridevirtual |
Get maximum number of concurrently executing jobs.
Implements JobSystem.
JPH_NAMESPACE_BEGIN void JobSystemThreadPool::Init | ( | uint | inMaxJobs, |
uint | inMaxBarriers, | ||
int | inNumThreads = -1 |
||
) |
Initialize the thread pool
inMaxJobs | Max number of jobs that can be allocated at any time |
inMaxBarriers | Max number of barriers that can be allocated at any time |
inNumThreads | Number of threads to start (the number of concurrent jobs is 1 more because the main thread will also run jobs while waiting for a barrier to complete). Use -1 to auto detect the amount of CPU's. |
|
overrideprotectedvirtual |
Adds a job to the job queue.
Implements JobSystem.
Adds a number of jobs at once to the job queue.
Implements JobSystem.
|
inline |
Change the max concurrency after initialization.
|
inline |
|
inline |