CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::Win32ThreadPool Class Referencefinal

#include <CeresEngine/Platform/Win32/Win32ThreadPool.hpp>

Inheritance diagram for CeresEngine::Win32ThreadPool:
CeresEngine::DispatchQueue CeresEngine::ExecutionContext

Classes

class  Executor
 An executor object that dispatches calls to the CoreFoundation CFRunLoop. More...
 

Public Member Functions

 Win32ThreadPool (DispatchQueueType type)
 
 ~Win32ThreadPool () noexcept final
 
AnyExecutor getExecutor () noexcept final
 Returns an executor that run execute scheduled commands on the context.
 
void suspend () final
 Suspends the invocation of function objects on a queue.
 
void resume () final
 Resumes the invocation of block objects on a queue.
 
UPtr< DispatchQueuecreateSubQueue (DispatchQueueType type, StringView name="") final
 Resumes the invocation of block objects on a queue.
 
- Public Member Functions inherited from CeresEngine::ExecutionContext
virtual ~ExecutionContext () noexcept=default
 Virtual destructor for the execution context object.
 
template<typename T >
bool hasService () noexcept
 Determine if the ExecutionContext contains the specified service type.
 
template<typename T >
TgetService () noexcept
 Obtain the service object corresponding to the given type.
 
template<typename T >
TgetServiceIf () noexcept
 Obtain the service object corresponding to the given type.
 
executor_type get_executor () noexcept
 Returns an executor that run execute scheduled commands on the context.
 
bool isActive () const noexcept
 Checks if the execution context is currently active.
 

Private Member Functions

void onWorkStarted () noexcept
 Inform the executor that it has some outstanding work to do.
 
void onWorkFinished () noexcept
 Inform the executor that some work is no longer outstanding.
 
void schedule (UniqueFunction< void()> function, ExecutorBlocking blockingProperty, ExecutorPriority priority)
 Schedules a new function to be run in the run loop.
 
PTP_CALLBACK_ENVIRON getCallbackEnvironment (ExecutorPriority priority) noexcept
 Determines the callback environment that better fits the given priority execution requirement.
 

Private Attributes

TP_CALLBACK_ENVIRON mCallbackEnvironments [3]
 
PTP_POOL mThreadPool
 

Additional Inherited Members

- Public Types inherited from CeresEngine::ExecutionContext
using ID = id
 
using executor_type = AnyExecutor
 
- Static Public Member Functions inherited from CeresEngine::ExecutionContext
static ExecutionContextgetCurrent () noexcept
 Gets the current execution context, if any is active.
 
static ExecutionContextget () noexcept
 Gets the current execution context, if any is active.
 

Constructor & Destructor Documentation

◆ Win32ThreadPool()

CeresEngine::Win32ThreadPool::Win32ThreadPool ( DispatchQueueType  type)
explicit

◆ ~Win32ThreadPool()

CeresEngine::Win32ThreadPool::~Win32ThreadPool ( )
finalnoexcept

Member Function Documentation

◆ createSubQueue()

UPtr< DispatchQueue > CeresEngine::Win32ThreadPool::createSubQueue ( DispatchQueueType  type,
StringView  name = "" 
)
finalvirtual

Resumes the invocation of block objects on a queue.

Calling this function decrements the suspension count of a suspended queue. While the count is greater than zero, the queue remains suspended. When the suspension count returns to zero, any blocks submitted to the dispatch queue or any events observed by the dispatch source while suspended are delivered.

With one exception, each call to resume() must balance a call to suspend(). It is undefined to call resume() more times than suspend(), which would result in a negative suspension count.

Implements CeresEngine::DispatchQueue.

◆ getCallbackEnvironment()

PTP_CALLBACK_ENVIRON CeresEngine::Win32ThreadPool::getCallbackEnvironment ( ExecutorPriority  priority)
privatenoexcept

Determines the callback environment that better fits the given priority execution requirement.

◆ getExecutor()

AnyExecutor CeresEngine::Win32ThreadPool::getExecutor ( )
inlinefinalvirtualnoexcept

Returns an executor that run execute scheduled commands on the context.

Implements CeresEngine::ExecutionContext.

◆ onWorkFinished()

void CeresEngine::Win32ThreadPool::onWorkFinished ( )
privatenoexcept

Inform the executor that some work is no longer outstanding.

◆ onWorkStarted()

void CeresEngine::Win32ThreadPool::onWorkStarted ( )
privatenoexcept

Inform the executor that it has some outstanding work to do.

◆ resume()

void CeresEngine::Win32ThreadPool::resume ( )
finalvirtual

Resumes the invocation of block objects on a queue.

Calling this function decrements the suspension count of a suspended queue. While the count is greater than zero, the queue remains suspended. When the suspension count returns to zero, any blocks submitted to the dispatch queue or any events observed by the dispatch source while suspended are delivered.

With one exception, each call to resume() must balance a call to suspend(). It is undefined to call resume() more times than suspend(), which would result in a negative suspension count.

Implements CeresEngine::DispatchQueue.

◆ schedule()

void CeresEngine::Win32ThreadPool::schedule ( UniqueFunction< void()>  function,
ExecutorBlocking  blockingProperty,
ExecutorPriority  priority 
)
private

Schedules a new function to be run in the run loop.

Parameters
functionThe function to be executed.

◆ suspend()

void CeresEngine::Win32ThreadPool::suspend ( )
finalvirtual

Suspends the invocation of function objects on a queue.

By suspending a dispatch object, your application can temporarily prevent the execution of any functions associated with that queue.

The suspension occurs after completion of any blocks running at the time of the call. Calling this function increments the suspension count of the object, and calling resume() decrements it. While the count is greater than zero, the object remains suspended, so you must balance each suspend() call with a matching resume() call.

Any blocks submitted to a dispatch queue or events observed by a dispatch source are delivered once the object is resumed.

Note
It is a programmer error to release an object that is currently suspended, because suspension implies that there is still work to be done. Therefore, always balance calls to this method with a corresponding call to resume() before disposing of the queue. The behavior when releasing the last reference to a dispatch object while it is in a suspended state is undefined.

Implements CeresEngine::DispatchQueue.

Member Data Documentation

◆ mCallbackEnvironments

TP_CALLBACK_ENVIRON CeresEngine::Win32ThreadPool::mCallbackEnvironments[3]
private

◆ mThreadPool

PTP_POOL CeresEngine::Win32ThreadPool::mThreadPool
private

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