68 Priority stopPriority= Priority::Lowest );
81 Ticks::Duration dbgWarnAfter );
84 ALIB_DBG(, Ticks::Duration dbgWarnAfter) );
86 ALIB_DBG(, Ticks::Duration::TDuration dbgWarnAfter) )
254 std::pair<Job*, bool>
pop();
303 template<
typename TJob,
typename... TArgs>
309 TJob* job=
manager.GetPoolAllocator()().New<TJob>( std::forward<TArgs>(args)... );
312 "Error in DedicatedWorker::schedule: Job size mismatch. Expected {} "
313 "while virtual method SizeOf returns {}.\n"
314 "Override this method for job-type <{}>",
315 sizeof(TJob), job->SizeOf(), &
typeid(*job) )
319 "Error in DedicatedWorker::schedule: Job pushed while this thread was not started, yet. "
335 template<
typename TJob,
typename... TArgs>
337 {
return schedule<TJob, TArgs...>( priority,
true, std::forward<TArgs>(args)... ); }
346 template<
typename TJob,
typename... TArgs>
374 virtual void Run()
override;
396 virtual bool process(
Job& vjob) { (void)vjob;
return false; }
426 "DedicatedWorker \"{}\" destructed, while job-queue is not empty.",
GetName() )
429 "DedicatedWorker destructed, while job-queue is not empty.")
485 manager.GetPoolAllocator().free(&job, size);
ListMA< DedicatedWorker * > workers
The list of workers.
MonoAllocator ma
Mono allocator. Used for commands and by DedicatedWorkers.
ALIB_DLL void RemoveAll(Priority stopPriority=Priority::Lowest)
ALIB_DLL DWManager()
Constructor.
PoolAllocator & GetPoolAllocator()
ALIB_DLL void Add(DedicatedWorker &thread)
ALIB_DLL bool Remove(DedicatedWorker &thread, Priority stopPriority=Priority::Lowest)
PoolAllocator pool
Pool allocator. Used for command objects.
MonoAllocator & GetAllocator()
ALIB_DLL bool WaitForAllIdle(Ticks::Duration timeout, Ticks::Duration dbgWarnAfter)
virtual ALIB_DLL void Run() override
virtual bool process(Job &vjob)
virtual Ticks::Duration triggerPeriod() override
friend class DWManager
Type alias in namespace alib.
std::pair< Job *, bool > pop()
TJob & schedule(Priority priority, bool keepJob, TArgs &&... args)
bool stopJobPushed
Flag which is set when the stop-job was scheduled.
ALIB_DLL void pushAndRelease(QueueElement &&jobInfo)
DWManager & manager
needed as we inherit TCondition
int length
The current number of jobs in the queue.
void ScheduleVoid(Priority priority, TArgs &&... args)
TJob & Schedule(Priority priority, TArgs &&... args)
bool stopJobExecuted
Flag which is set when the stop-job was executed.
DedicatedWorker(const character *threadName)
void ScheduleStop(Priority priority)
~DedicatedWorker() override
Destructor.
List< QueueElement > queue
virtual void trigger() override
Ticks::Duration triggerDuration
void DeleteJobDeferred(Job &job)
alib::Ticks statLastJobExecution
virtual const character * GetName() const
Triggered(const String &pName)
@ Running
The thread's Run method is currently processed.
@ Started
Method Start was invoked but not running, yet.
Thread(const character *pName=A_CHAR(""))
virtual const character * GetName() const
#define ALIB_ENUMS_ASSIGN_RECORD(TEnum, TRecord)
#define ALIB_ASSERT_WARNING(cond, domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_CALLER_PRUNED
#define ALIB_LOCK_WITH(lock)
Priority
Possible priorities of jobs assigned to an DedicatedWorker.
threads::Lock Lock
Type alias in namespace alib.
containers::List< T, MonoAllocator, TRecycling > ListMA
Type alias in namespace alib.
monomem::TPoolAllocator< MonoAllocator > PoolAllocator
monomem::TMonoAllocator< lang::HeapAllocator > MonoAllocator
threads::Thread Thread
Type alias in namespace alib.
alib::variables::Priority Priority
Type alias in namespace alib.
threadmodel::DWManager DWManager
Type alias in namespace alib.
time::Ticks Ticks
Type alias in namespace alib.
containers::List< T, HeapAllocator, TRecycling > List
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.
threadmodel::DedicatedWorker DedicatedWorker
Type alias in namespace alib.
virtual size_t SizeOf() override
Job * JobToDelete
The job to be deleted.
Container element of the queue.
Priority priority
The job's priority.
Job * job
The job containing the pool-allocated shared data.
Job(const std::type_info &id)
virtual ~Job()=default
Protected destructor.
TCondition(const character *dbgName)