SDL  2.0
SDL_timer_c.h File Reference
#include "../SDL_internal.h"
#include "SDL_timer.h"
+ Include dependency graph for SDL_timer_c.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define ROUND_RESOLUTION(X)   (((X+TIMER_RESOLUTION-1)/TIMER_RESOLUTION)*TIMER_RESOLUTION)

Functions

void SDL_TicksInit (void)
void SDL_TicksQuit (void)
int SDL_TimerInit (void)
void SDL_TimerQuit (void)

Macro Definition Documentation

#define ROUND_RESOLUTION (   X)    (((X+TIMER_RESOLUTION-1)/TIMER_RESOLUTION)*TIMER_RESOLUTION)

Definition at line 30 of file SDL_timer_c.h.

Function Documentation

void SDL_TicksInit ( void  )

Referenced by SDL_InitSubSystem(), and SDL_VideoInit().

void SDL_TicksQuit ( void  )

Referenced by SDL_Quit().

int SDL_TimerInit ( void  )

Definition at line 207 of file SDL_timer.c.

References SDL_TimerData::active, SDL_TimerData::nextID, SDL_AtomicGet, SDL_AtomicSet, SDL_CreateMutex, SDL_CreateSemaphore, SDL_CreateThreadInternal(), SDL_DestroyMutex, SDL_timer_data, SDL_TimerQuit(), SDL_TimerThread(), SDL_TimerData::sem, SDL_TimerData::thread, and SDL_TimerData::timermap_lock.

Referenced by SDL_AddTimer(), and SDL_InitSubSystem().

{
if (!SDL_AtomicGet(&data->active)) {
const char *name = "SDLTimer";
if (!data->timermap_lock) {
return -1;
}
if (!data->sem) {
return -1;
}
SDL_AtomicSet(&data->active, 1);
/* Timer threads use a callback into the app, so we can't set a limited stack size here. */
if (!data->thread) {
return -1;
}
SDL_AtomicSet(&data->nextID, 1);
}
return 0;
}
void SDL_TimerQuit ( void  )

Definition at line 239 of file SDL_timer.c.

References SDL_TimerData::active, SDL_TimerData::freelist, SDL_Timer::next, SDL_TimerMap::next, NULL, SDL_AtomicCAS, SDL_DestroyMutex, SDL_DestroySemaphore, SDL_free, SDL_SemPost, SDL_timer_data, SDL_WaitThread, SDL_TimerData::sem, SDL_TimerData::thread, SDL_TimerData::timermap, SDL_TimerData::timermap_lock, and SDL_TimerData::timers.

Referenced by SDL_QuitSubSystem(), and SDL_TimerInit().

{
SDL_Timer *timer;
SDL_TimerMap *entry;
if (SDL_AtomicCAS(&data->active, 1, 0)) { /* active? Move to inactive. */
/* Shutdown the timer thread */
if (data->thread) {
SDL_SemPost(data->sem);
data->thread = NULL;
}
data->sem = NULL;
/* Clean up the timer entries */
while (data->timers) {
timer = data->timers;
data->timers = timer->next;
SDL_free(timer);
}
while (data->freelist) {
timer = data->freelist;
data->freelist = timer->next;
SDL_free(timer);
}
while (data->timermap) {
entry = data->timermap;
data->timermap = entry->next;
SDL_free(entry);
}
}
}