| 24 | static KList<KTimerCallback*> timers; |
| 25 | static BOXEDWINE_MUTEX timerMutex; |
| 26 | void runTimers() { |
| 27 | BOXEDWINE_CRITICAL_SECTION_WITH_MUTEX(timerMutex); |
| 28 | U32 millies = KSystem::getMilliesSinceStart(); |
| 29 | timers.for_each([millies](KListNode<KTimerCallback*>* node) { |
| 30 | KTimerCallback* timer = node->data; |
| 31 | |
| 32 | if (timer->millies <= millies) { |
| 33 | if (timer->run()) { |
| 34 | timer->node.remove(); |
| 35 | } |
| 36 | } |
| 37 | }); |
| 38 | } |
| 39 | |
| 40 | U32 getNextTimer() { |
| 41 | BOXEDWINE_CRITICAL_SECTION_WITH_MUTEX(timerMutex); |