4#ifndef _Stroika_Foundation_Execution_IntervalTimer_h_
5#define _Stroika_Foundation_Execution_IntervalTimer_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include "Stroika/Foundation/Common/Common.h"
10#include "Stroika/Foundation/Containers/KeyedCollection.h"
63 optional<Time::Duration> fFrequency;
64 optional<Time::Duration> fHysteresis;
74 struct Key_Extractor_ {
82 using RegisteredTaskCollection =
112 Manager (
const shared_ptr<IRep>& rep);
141 const optional<Time::Duration>& hysteresis = nullopt);
185 shared_ptr<IRep> fRep_;
190 class IntervalTimer::Manager::IRep {
192 virtual ~IRep () =
default;
199 const optional<Time::Duration>& hysteresis) = 0;
202 virtual void RemoveRepeating (
const TimerCallback& intervalTimer)
noexcept = 0;
220 const optional<Time::Duration>& hysteresis)
override;
223 virtual void RemoveRepeating (
const TimerCallback& intervalTimer)
noexcept override;
231 shared_ptr<Rep_> fHiddenRep_;
260 using RunImmediatelyFlag::eDontRunImmediately;
288 Adder (
const Function<
void (
void)>& f,
const Time::Duration& repeatInterval,
const optional<Time::Duration>& hysteresis = nullopt);
290 const optional<Time::Duration>& hysteresis = nullopt);
292 const optional<Time::Duration>& hysteresis = nullopt);
294 RunImmediatelyFlag runImmediately,
const optional<Time::Duration>& hysteresis = nullopt);
300 nonvirtual
Adder& operator= (
const Adder&) =
delete;
301 nonvirtual
Adder& operator= (
Adder&& rhs)
noexcept;
306 nonvirtual
Function<void (
void)> GetCallback ()
const;
310 optional<Time::Duration> fHysteresis_;
322#include "IntervalTimer.inl"
time_point< RealtimeClock, DurationSeconds > TimePointSeconds
TimePointSeconds is a simpler approach to chrono::time_point, which doesn't require using templates e...
String is like std::u32string, except it is much easier to use, often much more space efficient,...
a cross between Mapping<KEY, T> and Collection<T> and Set<T>
Adder adds the given function object to the (for now default; later optionally explicit) IntervalTime...
Manager(const Manager &)=delete
nonvirtual void AddRepeating(const TimerCallback &intervalTimer, const Time::Duration &repeatInterval, const optional< Time::Duration > &hysteresis=nullopt)
Add a timer to be called repeatedly after duration repeatInterval.
nonvirtual void RemoveRepeating(const TimerCallback &intervalTimer) noexcept
nonvirtual void AddOneShot(const TimerCallback &intervalTimer, const Time::Duration &when)
Add a timer to be called once after duration when.
Manage interval timers - like the javascript setIntervalTimer API.
Function< void()> TimerCallback
Duration is a chrono::duration<double> (=.
Having explicit activator object allows for users to control the starting/stopping of facility in a m...
nonvirtual Characters::String ToString() const