Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 11 | pmbaty | 1 | /* | 
        
| 2 |   Simple DirectMedia Layer | 
        ||
| 3 |   Copyright (C) 1997-2023 Sam Lantinga <slouken@libsdl.org> | 
        ||
| 4 | |||
| 5 |   This software is provided 'as-is', without any express or implied | 
        ||
| 6 |   warranty.  In no event will the authors be held liable for any damages | 
        ||
| 7 |   arising from the use of this software. | 
        ||
| 8 | |||
| 9 |   Permission is granted to anyone to use this software for any purpose, | 
        ||
| 10 |   including commercial applications, and to alter it and redistribute it | 
        ||
| 11 |   freely, subject to the following restrictions: | 
        ||
| 12 | |||
| 13 |   1. The origin of this software must not be misrepresented; you must not | 
        ||
| 14 |      claim that you wrote the original software. If you use this software | 
        ||
| 15 |      in a product, an acknowledgment in the product documentation would be | 
        ||
| 16 |      appreciated but is not required. | 
        ||
| 17 |   2. Altered source versions must be plainly marked as such, and must not be | 
        ||
| 18 |      misrepresented as being the original software. | 
        ||
| 19 |   3. This notice may not be removed or altered from any source distribution. | 
        ||
| 20 | */ | 
        ||
| 21 | |||
| 22 | #ifndef SDL_timer_h_ | 
        ||
| 23 | #define SDL_timer_h_ | 
        ||
| 24 | |||
| 25 | /** | 
        ||
| 26 |  *  \file SDL_timer.h | 
        ||
| 27 |  * | 
        ||
| 28 |  *  Header for the SDL time management routines. | 
        ||
| 29 |  */ | 
        ||
| 30 | |||
| 31 | #include "SDL_stdinc.h" | 
        ||
| 32 | #include "SDL_error.h" | 
        ||
| 33 | |||
| 34 | #include "begin_code.h" | 
        ||
| 35 | /* Set up for C function definitions, even when using C++ */ | 
        ||
| 36 | #ifdef __cplusplus | 
        ||
| 37 | extern "C" {  | 
        ||
| 38 | #endif | 
        ||
| 39 | |||
| 40 | /** | 
        ||
| 41 |  * Get the number of milliseconds since SDL library initialization. | 
        ||
| 42 |  * | 
        ||
| 43 |  * This value wraps if the program runs for more than ~49 days. | 
        ||
| 44 |  * | 
        ||
| 45 |  * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() | 
        ||
| 46 |  * instead, where the value doesn't wrap every ~49 days. There are places in | 
        ||
| 47 |  * SDL where we provide a 32-bit timestamp that can not change without | 
        ||
| 48 |  * breaking binary compatibility, though, so this function isn't officially | 
        ||
| 49 |  * deprecated. | 
        ||
| 50 |  * | 
        ||
| 51 |  * \returns an unsigned 32-bit value representing the number of milliseconds | 
        ||
| 52 |  *          since the SDL library initialized. | 
        ||
| 53 |  * | 
        ||
| 54 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 55 |  * | 
        ||
| 56 |  * \sa SDL_TICKS_PASSED | 
        ||
| 57 |  */ | 
        ||
| 58 | extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void);  | 
        ||
| 59 | |||
| 60 | /** | 
        ||
| 61 |  * Get the number of milliseconds since SDL library initialization. | 
        ||
| 62 |  * | 
        ||
| 63 |  * Note that you should not use the SDL_TICKS_PASSED macro with values | 
        ||
| 64 |  * returned by this function, as that macro does clever math to compensate for | 
        ||
| 65 |  * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit | 
        ||
| 66 |  * values from this function can be safely compared directly. | 
        ||
| 67 |  * | 
        ||
| 68 |  * For example, if you want to wait 100 ms, you could do this: | 
        ||
| 69 |  * | 
        ||
| 70 |  * ```c | 
        ||
| 71 |  * const Uint64 timeout = SDL_GetTicks64() + 100; | 
        ||
| 72 |  * while (SDL_GetTicks64() < timeout) { | 
        ||
| 73 |  *     // ... do work until timeout has elapsed | 
        ||
| 74 |  * } | 
        ||
| 75 |  * ``` | 
        ||
| 76 |  * | 
        ||
| 77 |  * \returns an unsigned 64-bit value representing the number of milliseconds | 
        ||
| 78 |  *          since the SDL library initialized. | 
        ||
| 79 |  * | 
        ||
| 80 |  * \since This function is available since SDL 2.0.18. | 
        ||
| 81 |  */ | 
        ||
| 82 | extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void);  | 
        ||
| 83 | |||
| 84 | /** | 
        ||
| 85 |  * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. | 
        ||
| 86 |  * | 
        ||
| 87 |  * This should be used with results from SDL_GetTicks(), as this macro | 
        ||
| 88 |  * attempts to deal with the 32-bit counter wrapping back to zero every ~49 | 
        ||
| 89 |  * days, but should _not_ be used with SDL_GetTicks64(), which does not have | 
        ||
| 90 |  * that problem. | 
        ||
| 91 |  * | 
        ||
| 92 |  * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could | 
        ||
| 93 |  * do this: | 
        ||
| 94 |  * | 
        ||
| 95 |  * ```c | 
        ||
| 96 |  * const Uint32 timeout = SDL_GetTicks() + 100; | 
        ||
| 97 |  * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { | 
        ||
| 98 |  *     // ... do work until timeout has elapsed | 
        ||
| 99 |  * } | 
        ||
| 100 |  * ``` | 
        ||
| 101 |  * | 
        ||
| 102 |  * Note that this does not handle tick differences greater | 
        ||
| 103 |  * than 2^31 so take care when using the above kind of code | 
        ||
| 104 |  * with large timeout delays (tens of days). | 
        ||
| 105 |  */ | 
        ||
| 106 | #define SDL_TICKS_PASSED(A, B)  ((Sint32)((B) - (A)) <= 0) | 
        ||
| 107 | |||
| 108 | /** | 
        ||
| 109 |  * Get the current value of the high resolution counter. | 
        ||
| 110 |  * | 
        ||
| 111 |  * This function is typically used for profiling. | 
        ||
| 112 |  * | 
        ||
| 113 |  * The counter values are only meaningful relative to each other. Differences | 
        ||
| 114 |  * between values can be converted to times by using | 
        ||
| 115 |  * SDL_GetPerformanceFrequency(). | 
        ||
| 116 |  * | 
        ||
| 117 |  * \returns the current counter value. | 
        ||
| 118 |  * | 
        ||
| 119 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 120 |  * | 
        ||
| 121 |  * \sa SDL_GetPerformanceFrequency | 
        ||
| 122 |  */ | 
        ||
| 123 | extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void);  | 
        ||
| 124 | |||
| 125 | /** | 
        ||
| 126 |  * Get the count per second of the high resolution counter. | 
        ||
| 127 |  * | 
        ||
| 128 |  * \returns a platform-specific count per second. | 
        ||
| 129 |  * | 
        ||
| 130 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 131 |  * | 
        ||
| 132 |  * \sa SDL_GetPerformanceCounter | 
        ||
| 133 |  */ | 
        ||
| 134 | extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void);  | 
        ||
| 135 | |||
| 136 | /** | 
        ||
| 137 |  * Wait a specified number of milliseconds before returning. | 
        ||
| 138 |  * | 
        ||
| 139 |  * This function waits a specified number of milliseconds before returning. It | 
        ||
| 140 |  * waits at least the specified time, but possibly longer due to OS | 
        ||
| 141 |  * scheduling. | 
        ||
| 142 |  * | 
        ||
| 143 |  * \param ms the number of milliseconds to delay | 
        ||
| 144 |  * | 
        ||
| 145 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 146 |  */ | 
        ||
| 147 | extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms);  | 
        ||
| 148 | |||
| 149 | /** | 
        ||
| 150 |  * Function prototype for the timer callback function. | 
        ||
| 151 |  * | 
        ||
| 152 |  * The callback function is passed the current timer interval and returns | 
        ||
| 153 |  * the next timer interval. If the returned value is the same as the one | 
        ||
| 154 |  * passed in, the periodic alarm continues, otherwise a new alarm is | 
        ||
| 155 |  * scheduled. If the callback returns 0, the periodic alarm is cancelled. | 
        ||
| 156 |  */ | 
        ||
| 157 | typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);  | 
        ||
| 158 | |||
| 159 | /** | 
        ||
| 160 |  * Definition of the timer ID type. | 
        ||
| 161 |  */ | 
        ||
| 162 | typedef int SDL_TimerID;  | 
        ||
| 163 | |||
| 164 | /** | 
        ||
| 165 |  * Call a callback function at a future time. | 
        ||
| 166 |  * | 
        ||
| 167 |  * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). | 
        ||
| 168 |  * | 
        ||
| 169 |  * The callback function is passed the current timer interval and the user | 
        ||
| 170 |  * supplied parameter from the SDL_AddTimer() call and should return the next | 
        ||
| 171 |  * timer interval. If the value returned from the callback is 0, the timer is | 
        ||
| 172 |  * canceled. | 
        ||
| 173 |  * | 
        ||
| 174 |  * The callback is run on a separate thread. | 
        ||
| 175 |  * | 
        ||
| 176 |  * Timers take into account the amount of time it took to execute the | 
        ||
| 177 |  * callback. For example, if the callback took 250 ms to execute and returned | 
        ||
| 178 |  * 1000 (ms), the timer would only wait another 750 ms before its next | 
        ||
| 179 |  * iteration. | 
        ||
| 180 |  * | 
        ||
| 181 |  * Timing may be inexact due to OS scheduling. Be sure to note the current | 
        ||
| 182 |  * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your | 
        ||
| 183 |  * callback needs to adjust for variances. | 
        ||
| 184 |  * | 
        ||
| 185 |  * \param interval the timer delay, in milliseconds, passed to `callback` | 
        ||
| 186 |  * \param callback the SDL_TimerCallback function to call when the specified | 
        ||
| 187 |  *                 `interval` elapses | 
        ||
| 188 |  * \param param a pointer that is passed to `callback` | 
        ||
| 189 |  * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more | 
        ||
| 190 |  *          information. | 
        ||
| 191 |  * | 
        ||
| 192 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 193 |  * | 
        ||
| 194 |  * \sa SDL_RemoveTimer | 
        ||
| 195 |  */ | 
        ||
| 196 | extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval,  | 
        ||
| 197 | SDL_TimerCallback callback,  | 
        ||
| 198 | void *param);  | 
        ||
| 199 | |||
| 200 | /** | 
        ||
| 201 |  * Remove a timer created with SDL_AddTimer(). | 
        ||
| 202 |  * | 
        ||
| 203 |  * \param id the ID of the timer to remove | 
        ||
| 204 |  * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't | 
        ||
| 205 |  *          found. | 
        ||
| 206 |  * | 
        ||
| 207 |  * \since This function is available since SDL 2.0.0. | 
        ||
| 208 |  * | 
        ||
| 209 |  * \sa SDL_AddTimer | 
        ||
| 210 |  */ | 
        ||
| 211 | extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id);  | 
        ||
| 212 | |||
| 213 | |||
| 214 | /* Ends C function definitions when using C++ */ | 
        ||
| 215 | #ifdef __cplusplus | 
        ||
| 216 | } | 
        ||
| 217 | #endif | 
        ||
| 218 | #include "close_code.h" | 
        ||
| 219 | |||
| 220 | #endif /* SDL_timer_h_ */ | 
        ||
| 221 | |||
| 222 | /* vi: set ts=4 sw=4 expandtab: */ |