8#ifndef HPP_ALIB_THREADMODEL_DEDICATED_WORKER
9#define HPP_ALIB_THREADMODEL_DEDICATED_WORKER
17#include "alib/threadmodel/jobs.hpp"
27namespace alib {
namespace threadmodel {
87 Priority stopPriority= Priority::Lowest );
100 Ticks::Duration dbgWarnAfter );
103 ALIB_DBG(, Ticks::Duration dbgWarnAfter) );
105 ALIB_DBG(, Ticks::Duration::TDuration dbgWarnAfter) )
107 ALIB_DBG(, Ticks::Duration(dbgWarnAfter) ) ); }
275 std::pair<Job*, bool>
pop();
324 template<
typename TJob,
typename... TArgs>
334 "Error in DedicatedWorker::schedule: Job size mismatch. Expected " <<
sizeof(TJob) <<
335 " while virtual method SizeOf returns "<< job->SizeOf() <<
".\n"
336 "Override this method for job-type <" <<
typeid(*job) <<
">" )
340 "Error in DedicatedWorker::schedule: Job pushed while this thread was not started, yet. "
356 template<
typename TJob,
typename... TArgs>
358 {
return schedule<TJob, TArgs...>( priority,
true, std::forward<TArgs>(args)... ); }
367 template<
typename TJob,
typename... TArgs>
395 virtual void Run()
override;
417 virtual bool process(
Job& vjob) { (void)vjob;
return false; }
447 "DedicatedWorker \""<<
GetName() <<
"\" destructed, while job-queue is not empty." )
void free(void *mem, size_t size)
ALIB_API bool WaitForAllIdle(Ticks::Duration timeout, Ticks::Duration dbgWarnAfter)
PoolAllocator & GetPoolAllocator()
List< MonoAllocator, DedicatedWorker * > workers
The list of workers.
MonoAllocator ma
Mono allocator. Used for commands and by DedicatedWorkers.
MonoAllocator & GetAllocator()
ALIB_API void Add(DedicatedWorker &thread)
ALIB_API void RemoveAll(Priority stopPriority=Priority::Lowest)
ALIB_API bool Remove(DedicatedWorker &thread, Priority stopPriority=Priority::Lowest)
ALIB_API DWManager()
Constructor.
PoolAllocator pool
Pool allocator. Used for command objects.
virtual void trigger() override
TJob & schedule(Priority priority, bool keepJob, TArgs &&... args)
List< HeapAllocator, QueueElement > queue
bool stopJobPushed
Flag which is set when the stop-job was scheduled.
virtual ALIB_API void Run() override
void ScheduleVoid(Priority priority, TArgs &&... args)
~DedicatedWorker() override
Destructor.
void ScheduleStop(Priority priority)
virtual bool process(Job &vjob)
DedicatedWorker(const alib::String &threadName)
ALIB_API void pushAndRelease(QueueElement &&jobInfo)
virtual const CString GetName() const
bool stopJobExecuted
Flag which is set when the stop-job was executed.
DWManager & manager
needed as we inherit TCondition
Ticks::Duration triggerDuration
std::pair< Job *, bool > pop()
int length
The current number of jobs in the queue.
alib::Ticks statLastJobExecution
virtual Ticks::Duration triggerPeriod() override
void DeleteJobDeferred(Job &job)
TJob & Schedule(Priority priority, TArgs &&... args)
ALIB_API void Acquire(ALIB_DBG_TAKE_CI)
ALIB_API void Release(ALIB_DBG_TAKE_CI)
virtual const CString GetName() const
@ Running
The thread's Run method is currently processed.
@ Started
Method Start was invoked but not running, yet.
#define ALIB_ASSERT_MODULE(modulename)
#define ALIB_ENUMS_ASSIGN_RECORD(TEnum, TRecord)
#define ALIB_ASSERT_ERROR(cond,...)
#define ALIB_ASSERT_WARNING(cond,...)
#define ALIB_CALLER_PRUNED
#define ALIB_LOCK_WITH(lock)
Priority
Possible priorities of jobs assigned to an DedicatedWorker.
threadmodel::DWManager DWManager
Type alias in namespace alib.
NLocalString< 256 > NString256
Type alias name for TLocalString<nchar,256>.
The job sent by method DeleteJobDeferred.
virtual size_t SizeOf() override
Job * JobToDelete
The job to be deleted.
The stop job sent by method ScheduleStop.
Container element of the queue.
Priority priority
The job's priority.
Job * job
The job containing the pool-allocated shared data.
virtual ~Job()=default
Protected destructor.