1using namespace std::literals::chrono_literals;
12 ALIB_WARNING(
"TMOD",
"Trigger destroyed without having run" )
15 ALIB_ERROR(
"TMOD",
"Trigger destroyed without being terminated" )
23 bool isExisting=
false;
25 if ( it.Target == &triggered ) {
34 now + ( initialWakeup ? Ticks::Duration()
39 ALIB_WARNING(
"TMOD",
"Duplicate registration of triggered object \"{}\".",
42 ALIB_WARNING(
"TMOD",
"Duplicate registration of triggered object." )
54 if(it->Target == &triggered) {
64 "Managed thread \"{}\" not found for de-registering with trigger list", triggered.
Name)
66 ALIB_MESSAGE(
"TMOD",
"Managed thread not found for de-registering with trigger list")
71 ALIB_MESSAGE(
"TMOD",
"Internal trigger-thread started" )
79 ALIB_MESSAGE(
"TMOD",
"Internal trigger-thread exiting" )
95 "Trigger::Do() called twice!\n"
96 "Hint: Did you start the trigger thread and in addition 'manually' invoked Do()?\n"
97 " Only on sort of execution is allowed." )
99 ALIB_DBG(
Dbg.AssertExclusiveWaiter= std::this_thread::get_id(); )
105 && now.
Reset() < until )
108 Ticks nextTriggerTime= until;
111 if( it.NextWakeup <= now ) {
112 it.Target->trigger();
114 it.NextWakeup= now + it.Target->triggerPeriod();
118 nextTriggerTime= (std::min)(nextTriggerTime, it.NextWakeup);
#define ALIB_MESSAGE(domain,...)
#define ALIB_COMMA_CALLER_PRUNED
#define ALIB_WARNING(domain,...)
#define ALIB_ERROR(domain,...)
#define ALIB_LOCK_RECURSIVE_WITH(lock)
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_CALLER_PRUNED
void Add(Triggered &triggered, bool initialWakeup=false)
bool internalThreadMode
Denotes whether or not the trigger is currently used in internal thread mode.
ListMA< TriggerEntry > triggerList
The list of registered triggered objects.
virtual void Run() override
Implementation of the parent interface (virtual abstract).
virtual void Stop()
Stops the trigger thread and joins it.
void Remove(Triggered &triggered)
virtual ~Trigger() override
Destructor.
virtual Ticks::Duration triggerPeriod()=0
@ Started
Method #".Start" was invoked but not running, yet.
@ Terminated
The thread is terminated.
Thread(const character *pName=A_CHAR(""))
State state
Internal flag to indicate if the thread is alive.
static Ticks EndOfEpoch()
constexpr void SetNull(T &t)
constexpr bool IsNull(const T &t)
RecursiveLock GLOBAL_ALLOCATOR_LOCK
time::Ticks Ticks
Type alias in namespace #"%alib".
void WaitForNotification(ALIB_DBG_TAKE_CI)
TCondition(const character *dbgName)
void Acquire(ALIB_DBG_TAKE_CI)
void ReleaseAndNotify(ALIB_DBG_TAKE_CI)