21 #include "../SDL_internal.h"
27 #include "../thread/SDL_systhread.h"
82 SDL_Timer *prev, *curr;
85 for (curr =
data->timers; curr; prev = curr, curr = curr->next) {
86 if ((
Sint32)(timer->scheduled-curr->scheduled) < 0) {
106 SDL_Timer *freelist_head =
NULL;
107 SDL_Timer *freelist_tail =
NULL;
108 Uint32 tick, now, interval, delay;
120 pending =
data->pending;
125 freelist_tail->next =
data->freelist;
126 data->freelist = freelist_head;
134 pending = pending->next;
137 freelist_head =
NULL;
138 freelist_tail =
NULL;
151 while (
data->timers) {
152 current =
data->timers;
154 if ((
Sint32)(tick-current->scheduled) < 0) {
156 delay = (current->scheduled - tick);
161 data->timers = current->next;
166 interval = current->callback(current->interval, current->param);
171 current->interval = interval;
172 current->scheduled = tick + interval;
175 if (!freelist_head) {
176 freelist_head = current;
179 freelist_tail->next = current;
181 freelist_tail = current;
189 interval = (now - tick);
190 if (interval > delay) {
212 const char *
name =
"SDLTimer";
214 if (!
data->timermap_lock) {
257 while (
data->timers) {
258 timer =
data->timers;
259 data->timers = timer->next;
262 while (
data->freelist) {
263 timer =
data->freelist;
264 data->freelist = timer->next;
267 while (
data->timermap) {
268 entry =
data->timermap;
269 data->timermap = entry->next;
293 timer =
data->freelist;
295 data->freelist = timer->next;
302 timer = (SDL_Timer *)
SDL_malloc(
sizeof(*timer));
310 timer->param =
param;
311 timer->interval = interval;
315 entry = (SDL_TimerMap *)
SDL_malloc(
sizeof(*entry));
321 entry->timer = timer;
322 entry->timerID = timer->timerID;
325 entry->next =
data->timermap;
326 data->timermap = entry;
331 timer->next =
data->pending;
332 data->pending = timer;
338 return entry->timerID;
345 SDL_TimerMap *prev, *entry;
351 for (entry =
data->timermap; entry; prev = entry, entry = entry->next) {
352 if (entry->timerID ==
id) {
354 prev->next = entry->next;
356 data->timermap = entry->next;