00001 /* 00002 SDL - Simple DirectMedia Layer 00003 Copyright (C) 1997-2009 Sam Lantinga 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Lesser General Public License for more details. 00014 00015 You should have received a copy of the GNU Lesser General Public 00016 License along with this library; if not, write to the Free Software 00017 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00018 00019 Sam Lantinga 00020 slouken@libsdl.org 00021 */ 00022 00023 #ifndef _SDL_timer_h 00024 #define _SDL_timer_h 00025 00032 #include "SDL_stdinc.h" 00033 #include "SDL_error.h" 00034 00035 #include "begin_code.h" 00036 /* Set up for C function definitions, even when using C++ */ 00037 #ifdef __cplusplus 00038 /* *INDENT-OFF* */ 00039 extern "C" { 00040 /* *INDENT-ON* */ 00041 #endif 00042 00043 /* This is the OS scheduler timeslice, in milliseconds */ 00044 #define SDL_TIMESLICE 10 00045 00046 /* This is the maximum resolution of the SDL timer on all platforms */ 00047 #define TIMER_RESOLUTION 10 /* Experimentally determined */ 00048 00049 /* Get the number of milliseconds since the SDL library initialization. 00050 * Note that this value wraps if the program runs for more than ~49 days. 00051 */ 00052 extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); 00053 00054 /* Wait a specified number of milliseconds before returning */ 00055 extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); 00056 00057 /* Function prototype for the timer callback function */ 00058 typedef Uint32(SDLCALL * SDL_TimerCallback) (Uint32 interval); 00059 00060 /* Set a callback to run after the specified number of milliseconds has 00061 * elapsed. The callback function is passed the current timer interval 00062 * and returns the next timer interval. If the returned value is the 00063 * same as the one passed in, the periodic alarm continues, otherwise a 00064 * new alarm is scheduled. If the callback returns 0, the periodic alarm 00065 * is cancelled. 00066 * 00067 * To cancel a currently running timer, call SDL_SetTimer(0, NULL); 00068 * 00069 * The timer callback function may run in a different thread than your 00070 * main code, and so shouldn't call any functions from within itself. 00071 * 00072 * The maximum resolution of this timer is 10 ms, which means that if 00073 * you request a 16 ms timer, your callback will run approximately 20 ms 00074 * later on an unloaded system. If you wanted to set a flag signaling 00075 * a frame update at 30 frames per second (every 33 ms), you might set a 00076 * timer for 30 ms: 00077 * SDL_SetTimer((33/10)*10, flag_update); 00078 * 00079 * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). 00080 * 00081 * Under UNIX, you should not use raise or use SIGALRM and this function 00082 * in the same program, as it is implemented using setitimer(). You also 00083 * should not use this function in multi-threaded applications as signals 00084 * to multi-threaded apps have undefined behavior in some implementations. 00085 * 00086 * This function returns 0 if successful, or -1 if there was an error. 00087 */ 00088 extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, 00089 SDL_TimerCallback callback); 00090 00091 /* New timer API, supports multiple timers 00092 * Written by Stephane Peter <megastep@lokigames.com> 00093 */ 00094 00095 /* Function prototype for the new timer callback function. 00096 * The callback function is passed the current timer interval and returns 00097 * the next timer interval. If the returned value is the same as the one 00098 * passed in, the periodic alarm continues, otherwise a new alarm is 00099 * scheduled. If the callback returns 0, the periodic alarm is cancelled. 00100 */ 00101 typedef Uint32(SDLCALL * SDL_NewTimerCallback) (Uint32 interval, void *param); 00102 00103 /* Definition of the timer ID type */ 00104 typedef struct _SDL_TimerID *SDL_TimerID; 00105 00106 /* Add a new timer to the pool of timers already running. 00107 Returns a timer ID, or NULL when an error occurs. 00108 */ 00109 extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, 00110 SDL_NewTimerCallback 00111 callback, void *param); 00112 00113 /* Remove one of the multiple timers knowing its ID. 00114 * Returns a boolean value indicating success. 00115 */ 00116 extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); 00117 00118 /* Ends C function definitions when using C++ */ 00119 #ifdef __cplusplus 00120 /* *INDENT-OFF* */ 00121 } 00122 /* *INDENT-ON* */ 00123 #endif 00124 #include "close_code.h" 00125 00126 #endif /* _SDL_timer_h */ 00127 00128 /* vi: set ts=4 sw=4 expandtab: */