SDL_timer.h

Función SDL_AddTimer

Sintaxis

SDL_TimerID SDL_AddTimer(Uint32 interval,
                         SDL_TimerCallback callback,
                         void *param);

Descripción

Invoca a una función de retrollamada en un momento del futuro.

Parámetros

interval
El retardo del temporizador, en milisegundos, pasado a la retrollamada.
callback
La función SDL_TimerCallback a invocar cuando transcurra el el interval especificado.
param
Un puntero que será pasado a la retrollamada.

Valor de retorno

Devuelve un ID de temporizador o 0 si se ha producido un error; llamar a SDL_GetError() para obtener más información.

Observaciones

Si utiliza esta función, se debe pasar SDL_INIT_TIMER a SDL_Init().

A la función de retrollamada se le pasa el intervalo actual del temporizador y el parámetro suministrado por el usuario desde la llamada a SDL_AddTimer() y debe devolver el siguiente intervalo del temporizador. Si el valor devuelto por la llamada de retorno es 0, el temporizador se cancela.

La retrollamada se ejecuta en un hilo separado.

Los temporizadores tienen en cuenta la cantidad de tiempo que se tardó en ejecutar la retrollamada. Por ejemplo, si la llamada de retorno tardó 250 ms en ejecutarse y devolvió 1000 (ms), el temporizador sólo esperará otros 750 ms antes de su siguiente iteración.

El tiempo puede ser inexacto debido a la programación del sistema operativo. Asegúrese de anotar el tiempo actual con SDL_GetTicks() o SDL_GetPerformanceCounter() en caso de que su llamada de retorno necesite ajustarse a las variaciones.

Ejemplo

// Función a invocar después de cierto tiempo
Uint32 callback(Uint32 interval, void* name) {
    printf("Hola %s!\n", static_cast<char*>(name));
       
    return 0;
}
...

// Inicializar el temporizador
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
...

// Ajustar el temporizador a 1 segundo
SDL_TimerID timerID = SDL_AddTimer(1000, callback, const_cast<char*>("SDL"));

// Main loop
while(!quit) {
    ...
}

// Eliminar el temporizador después de bucle principal
SDL_RemoveTimer(timerID);