1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2006 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21 */ 22 23 #ifndef _SDL_timer_h 24 #define _SDL_timer_h 25 26 /* Header for the SDL time management routines */ 27 28 #include "SDL_stdinc.h" 29 #include "SDL_error.h" 30 31 #include "begin_code.h" 32 /* Set up for C function definitions, even when using C++ */ 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /* This is the OS scheduler timeslice, in milliseconds */ 38 #define SDL_TIMESLICE 10 39 40 /* This is the maximum resolution of the SDL timer on all platforms */ 41 #define TIMER_RESOLUTION 10 /* Experimentally determined */ 42 43 /* Get the number of milliseconds since the SDL library initialization. 44 * Note that this value wraps if the program runs for more than ~49 days. 45 */ 46 extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); 47 48 /* Wait a specified number of milliseconds before returning */ 49 extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); 50 51 /* Function prototype for the timer callback function */ 52 typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); 53 54 /* Set a callback to run after the specified number of milliseconds has 55 * elapsed. The callback function is passed the current timer interval 56 * and returns the next timer interval. If the returned value is the 57 * same as the one passed in, the periodic alarm continues, otherwise a 58 * new alarm is scheduled. If the callback returns 0, the periodic alarm 59 * is cancelled. 60 * 61 * To cancel a currently running timer, call SDL_SetTimer(0, NULL); 62 * 63 * The timer callback function may run in a different thread than your 64 * main code, and so shouldn't call any functions from within itself. 65 * 66 * The maximum resolution of this timer is 10 ms, which means that if 67 * you request a 16 ms timer, your callback will run approximately 20 ms 68 * later on an unloaded system. If you wanted to set a flag signaling 69 * a frame update at 30 frames per second (every 33 ms), you might set a 70 * timer for 30 ms: 71 * SDL_SetTimer((33/10)*10, flag_update); 72 * 73 * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). 74 * 75 * Under UNIX, you should not use raise or use SIGALRM and this function 76 * in the same program, as it is implemented using setitimer(). You also 77 * should not use this function in multi-threaded applications as signals 78 * to multi-threaded apps have undefined behavior in some implementations. 79 * 80 * This function returns 0 if successful, or -1 if there was an error. 81 */ 82 extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback); 83 84 /* New timer API, supports multiple timers 85 * Written by Stephane Peter <megastep@lokigames.com> 86 */ 87 88 /* Function prototype for the new timer callback function. 89 * The callback function is passed the current timer interval and returns 90 * the next timer interval. If the returned value is the same as the one 91 * passed in, the periodic alarm continues, otherwise a new alarm is 92 * scheduled. If the callback returns 0, the periodic alarm is cancelled. 93 */ 94 typedef Uint32 (SDLCALL *SDL_NewTimerCallback)(Uint32 interval, void *param); 95 96 /* Definition of the timer ID type */ 97 typedef struct _SDL_TimerID *SDL_TimerID; 98 99 /* Add a new timer to the pool of timers already running. 100 Returns a timer ID, or NULL when an error occurs. 101 */ 102 extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param); 103 104 /* Remove one of the multiple timers knowing its ID. 105 * Returns a boolean value indicating success. 106 */ 107 extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); 108 109 /* Ends C function definitions when using C++ */ 110 #ifdef __cplusplus 111 } 112 #endif 113 #include "close_code.h" 114 115 #endif /* _SDL_timer_h */ 116