mirror of
https://github.com/yawut/SDL.git
synced 2026-07-19 01:11:38 -05:00
afwlehmann
Sorry for re-opening, but it turns out that the current interval is indeed not updated. I've just checked the source code of the 2.0.3 release again:
163 if (current->canceled) {
164 interval = 0;
165 } else {
166 interval = current->callback(current->interval, current->param);
167 }
168
169 if (interval > 0) {
170 /* Reschedule this timer */
171 current->interval = interval; // <-- this line is missing
172 current->scheduled = tick + interval;
173 SDL_AddTimerInternal(data, current);
174 } else {
According to the documentation: "The callback function is passed the current timer interval and the user supplied parameter from the SDL_AddTimer() call and returns the next timer interval. If the returned value from the callback is 0, the timer is canceled."
If I understand the text correctly, then the current interval should in fact be updated according to the returned value. Otherwise there would be a discrepancy between the next time for which the timer is actually re-scheduled and the value that's passed to the callback once the timer fires again.
This could be fixed by adding line #171.
|
||
|---|---|---|
| .. | ||
| atomic | ||
| audio | ||
| core | ||
| cpuinfo | ||
| dynapi | ||
| events | ||
| file | ||
| filesystem | ||
| haptic | ||
| joystick | ||
| libm | ||
| loadso | ||
| main | ||
| power | ||
| render | ||
| stdlib | ||
| test | ||
| thread | ||
| timer | ||
| video | ||
| SDL_assert_c.h | ||
| SDL_assert.c | ||
| SDL_dataqueue.c | ||
| SDL_dataqueue.h | ||
| SDL_error_c.h | ||
| SDL_error.c | ||
| SDL_hints.c | ||
| SDL_internal.h | ||
| SDL_log.c | ||
| SDL.c | ||