18 using namespace iplug;
20 #if defined OS_MAC || defined OS_IOS 22 Timer* Timer::Create(ITimerFunction func, uint32_t intervalMs)
24 return new Timer_impl(func, intervalMs);
27 Timer_impl::Timer_impl(ITimerFunction func, uint32_t intervalMs)
29 , mIntervalMs(intervalMs)
31 CFRunLoopTimerContext context;
34 context.retain =
nullptr;
35 context.release =
nullptr;
36 context.copyDescription =
nullptr;
37 CFTimeInterval interval = intervalMs / 1000.0;
38 CFRunLoopRef runLoop = CFRunLoopGetMain();
39 mOSTimer = CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent(), interval, 0, 0, TimerProc, &context);
40 CFRunLoopAddTimer(runLoop, mOSTimer, kCFRunLoopCommonModes);
43 Timer_impl::~Timer_impl()
48 void Timer_impl::Stop()
52 CFRunLoopTimerInvalidate(mOSTimer);
58 void Timer_impl::TimerProc(CFRunLoopTimerRef timer,
void *info)
60 Timer_impl* itimer = (Timer_impl*) info;
61 itimer->mTimerFunc(*itimer);
66 Timer* Timer::Create(ITimerFunction func, uint32_t intervalMs)
68 return new Timer_impl(func, intervalMs);
71 WDL_Mutex Timer_impl::sMutex;
72 WDL_PtrList<Timer_impl> Timer_impl::sTimers;
74 Timer_impl::Timer_impl(ITimerFunction func, uint32_t intervalMs)
76 , mIntervalMs(intervalMs)
79 ID = SetTimer(0, 0, intervalMs, TimerProc);
83 WDL_MutexLock lock(&sMutex);
88 Timer_impl::~Timer_impl()
93 void Timer_impl::Stop()
98 WDL_MutexLock lock(&sMutex);
99 sTimers.DeletePtr(
this);
104 void CALLBACK Timer_impl::TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
106 WDL_MutexLock lock(&sMutex);
108 for (
auto i = 0; i < sTimers.GetSize(); i++)
110 Timer_impl* pTimer = sTimers.Get(i);
112 if (pTimer->ID == idEvent)
114 pTimer->mTimerFunc(*pTimer);
120 Timer* Timer::Create(ITimerFunction func, uint32_t intervalMs)
122 return new Timer_impl(func, intervalMs);
125 Timer_impl::Timer_impl(ITimerFunction func, uint32_t intervalMs)
128 ID = emscripten_set_interval(TimerProc, intervalMs,
this);
131 Timer_impl::~Timer_impl()
136 void Timer_impl::Stop()
138 emscripten_clear_interval(ID);
141 void Timer_impl::TimerProc(
void* userData)
143 Timer_impl* itimer = (Timer_impl*) userData;
144 itimer->mTimerFunc(*itimer);
This file includes classes for implementing timers - in order to get a regular callback on the main t...