59 auto elapsed = (
int) (now >= lastTime ? (now - lastTime)
60 : (std::numeric_limits<uint32>::max() - (lastTime - now)));
65 if (timeUntilFirstTimer <= 0)
73 messageToSend->post();
80 messageToSend->post();
101 auto& first =
timers.front();
103 if (first.countdownMs > 0)
106 auto* timer = first.timer;
107 first.countdownMs = timer->timerPeriodMs;
115 timer->timerCallback();
195 timers.push_back ({
t,
t->timerPeriodMs });
196 t->positionInQueue = pos;
203 auto pos =
t->positionInQueue;
204 auto lastIndex =
timers.size() - 1;
209 for (
auto i = pos;
i < lastIndex; ++
i)
212 timers[
i].timer->positionInQueue =
i;
220 auto pos =
t->positionInQueue;
225 auto lastCountdown =
timers[pos].countdownMs;
226 auto newCountdown =
t->timerPeriodMs;
228 if (newCountdown != lastCountdown)
230 timers[pos].countdownMs = newCountdown;
232 if (newCountdown > lastCountdown)
243 auto numTimers =
timers.size();
245 if (pos < numTimers - 1)
253 if (next == numTimers ||
timers[next].countdownMs >=
t.countdownMs)
257 timers[pos].timer->positionInQueue = pos;
263 t.timer->positionInQueue = pos;
275 auto& prev =
timers[(size_t) pos - 1];
277 if (prev.countdownMs <=
t.countdownMs)
281 timers[pos].timer->positionInQueue = pos;
287 t.timer->positionInQueue = pos;
299 t.countdownMs -= numMillisecsElapsed;
301 return timers.front().countdownMs;
351 if (timerFrequencyHz > 0)
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
void triggerAsyncUpdate()
Definition juce_AsyncUpdater.cpp:62
void cancelPendingUpdate() noexcept
Definition juce_AsyncUpdater.cpp:74
AsyncUpdater()
Definition juce_AsyncUpdater.cpp:44
Definition juce_CriticalSection.h:43
GenericScopedLock< CriticalSection > ScopedLockType
Definition juce_CriticalSection.h:93
GenericScopedUnlock< CriticalSection > ScopedUnlockType
Definition juce_CriticalSection.h:96
DeletedAtShutdown()
Definition juce_DeletedAtShutdown.cpp:34
Definition juce_MessageManager.h:182
static MessageManager * getInstanceWithoutCreating() noexcept
Definition juce_MessageManager.cpp:58
Definition juce_ReferenceCountedObject.h:247
void startThread()
Definition juce_Thread.cpp:122
bool wait(int timeOutMilliseconds) const
Definition juce_Thread.cpp:299
Thread(const String &threadName, size_t threadStackSize=0)
Definition juce_Thread.cpp:26
bool threadShouldExit() const
Definition juce_Thread.cpp:177
bool stopThread(int timeOutMilliseconds)
Definition juce_Thread.cpp:208
void notify() const
Definition juce_Thread.cpp:304
void signalThreadShouldExit()
Definition juce_Thread.cpp:171
bool isThreadRunning() const
Definition juce_Thread.cpp:155
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
Definition juce_Timer.cpp:29
void removeTimer(Timer *t)
Definition juce_Timer.cpp:201
void callTimersSynchronously()
Definition juce_Timer.cpp:127
static TimerThread * instance
Definition juce_Timer.cpp:160
std::vector< TimerCountdown > timers
Definition juce_Timer.cpp:170
void run() override
Definition juce_Timer.cpp:51
int getTimeUntilFirstTimer(int numMillisecsElapsed)
Definition juce_Timer.cpp:291
~TimerThread() override
Definition juce_Timer.cpp:39
static void resetCounter(Timer *tim) noexcept
Definition juce_Timer.cpp:154
WaitableEvent callbackArrived
Definition juce_Timer.cpp:172
static void add(Timer *tim) noexcept
Definition juce_Timer.cpp:140
TimerThread()
Definition juce_Timer.cpp:33
void shuffleTimerBackInQueue(size_t pos)
Definition juce_Timer.cpp:241
CriticalSection LockType
Definition juce_Timer.cpp:31
static void remove(Timer *tim) noexcept
Definition juce_Timer.cpp:148
void resetTimerCounter(Timer *t) noexcept
Definition juce_Timer.cpp:218
void shuffleTimerForwardInQueue(size_t pos)
Definition juce_Timer.cpp:267
static LockType lock
Definition juce_Timer.cpp:161
void addTimer(Timer *t)
Definition juce_Timer.cpp:186
void callTimers()
Definition juce_Timer.cpp:93
void handleAsyncUpdate() override
Definition juce_Timer.cpp:304
virtual ~Timer()
Definition juce_Timer.cpp:319
void stopTimer() noexcept
Definition juce_Timer.cpp:357
Timer() noexcept
Definition juce_Timer.cpp:316
void startTimerHz(int timerFrequencyHz) noexcept
Definition juce_Timer.cpp:349
bool isTimerRunning() const noexcept
Definition juce_Timer.h:111
int timerPeriodMs
Definition juce_Timer.h:132
static void JUCE_CALLTYPE callPendingTimersSynchronously()
Definition juce_Timer.cpp:368
static void JUCE_CALLTYPE callAfterDelay(int milliseconds, std::function< void()> functionToCall)
Definition juce_Timer.cpp:393
void startTimer(int intervalInMilliseconds) noexcept
Definition juce_Timer.cpp:332
Definition juce_WaitableEvent.h:36
struct huft * t
Definition inflate.c:943
register unsigned i
Definition inflate.c:1575
unsigned f
Definition inflate.c:1572
static double timeout
Definition pugl.h:1799
#define JUCE_TRY
Definition juce_ApplicationBase.h:329
#define JUCE_CATCH_EXCEPTION
Definition juce_ApplicationBase.h:330
#define JUCE_ASSERT_MESSAGE_MANAGER_EXISTS
Definition juce_MessageManager.h:479
Definition carla_juce.cpp:31
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
Definition juce_Timer.cpp:375
void timerCallback() override
Definition juce_Timer.cpp:381
std::function< void()> function
Definition juce_Timer.cpp:388
LambdaInvoker(int milliseconds, std::function< void()> f)
Definition juce_Timer.cpp:376
Definition juce_Timer.cpp:175
CallTimersMessage()
Definition juce_Timer.cpp:176
void messageCallback() override
Definition juce_Timer.cpp:178
Definition juce_Timer.cpp:165
int countdownMs
Definition juce_Timer.cpp:167
Timer * timer
Definition juce_Timer.cpp:166
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396