annotate SDL3/SDL_timer.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #ifndef SDL_timer_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #define SDL_timer_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 * # CategoryTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * SDL provides time management functionality. It is useful for dealing with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 * (usually) small durations of time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 * This is not to be confused with _calendar time_ management, which is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 * provided by [CategoryTime](CategoryTime).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 * This category covers measuring time elapsed (SDL_GetTicks(),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 * SDL_GetPerformanceCounter()), putting a thread to sleep for a certain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 * amount of time (SDL_Delay(), SDL_DelayNS(), SDL_DelayPrecise()), and firing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 * a callback function after a certain amount of time has elapsed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 * (SDL_AddTimer(), etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 * There are also useful macros to convert between time units, like
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 * SDL_SECONDS_TO_NS() and such.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #include <SDL3/SDL_error.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 /* Set up for C function definitions, even when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 /* SDL time constants */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 * Number of milliseconds in a second.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 * This is always 1000.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 #define SDL_MS_PER_SECOND 1000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 * Number of microseconds in a second.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 * This is always 1000000.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 #define SDL_US_PER_SECOND 1000000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 * Number of nanoseconds in a second.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 * This is always 1000000000.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 #define SDL_NS_PER_SECOND 1000000000LL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 * Number of nanoseconds in a millisecond.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 * This is always 1000000.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 #define SDL_NS_PER_MS 1000000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 * Number of nanoseconds in a microsecond.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 * This is always 1000.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 #define SDL_NS_PER_US 1000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 * Convert seconds to nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 * This only converts whole numbers, not fractional seconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * \param S the number of seconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 * \returns S, expressed in nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 #define SDL_SECONDS_TO_NS(S) (((Uint64)(S)) * SDL_NS_PER_SECOND)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 * Convert nanoseconds to seconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 * This performs a division, so the results can be dramatically different if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 * `NS` is an integer or floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 * \param NS the number of nanoseconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 * \returns NS, expressed in seconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 #define SDL_NS_TO_SECONDS(NS) ((NS) / SDL_NS_PER_SECOND)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 * Convert milliseconds to nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 * This only converts whole numbers, not fractional milliseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 * \param MS the number of milliseconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 * \returns MS, expressed in nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 #define SDL_MS_TO_NS(MS) (((Uint64)(MS)) * SDL_NS_PER_MS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 * Convert nanoseconds to milliseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 * This performs a division, so the results can be dramatically different if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 * `NS` is an integer or floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 * \param NS the number of nanoseconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 * \returns NS, expressed in milliseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 #define SDL_NS_TO_MS(NS) ((NS) / SDL_NS_PER_MS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 * Convert microseconds to nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 * This only converts whole numbers, not fractional microseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 * \param US the number of microseconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 * \returns US, expressed in nanoseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 #define SDL_US_TO_NS(US) (((Uint64)(US)) * SDL_NS_PER_US)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 * Convert nanoseconds to microseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 * This performs a division, so the results can be dramatically different if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 * `NS` is an integer or floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 * \param NS the number of nanoseconds to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 * \returns NS, expressed in microseconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 #define SDL_NS_TO_US(NS) ((NS) / SDL_NS_PER_US)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 * Get the number of milliseconds that have elapsed since the SDL library
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 * initialization.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 * \returns an unsigned 64‑bit integer that represents the number of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 * milliseconds that have elapsed since the SDL library was
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 * initialized (typically via a call to SDL_Init).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 * \sa SDL_GetTicksNS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetTicks(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 * Get the number of nanoseconds since SDL library initialization.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 * \returns an unsigned 64-bit value representing the number of nanoseconds
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 * since the SDL library initialized.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetTicksNS(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 * Get the current value of the high resolution counter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 * This function is typically used for profiling.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 * The counter values are only meaningful relative to each other. Differences
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 * between values can be converted to times by using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 * SDL_GetPerformanceFrequency().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 * \returns the current counter value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 * \sa SDL_GetPerformanceFrequency
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 * Get the count per second of the high resolution counter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 * \returns a platform-specific count per second.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 * \sa SDL_GetPerformanceCounter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 * Wait a specified number of milliseconds before returning.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 * This function waits a specified number of milliseconds before returning. It
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 * waits at least the specified time, but possibly longer due to OS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 * scheduling.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 * \param ms the number of milliseconds to delay.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 * \sa SDL_DelayNS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 * \sa SDL_DelayPrecise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 extern SDL_DECLSPEC void SDLCALL SDL_Delay(Uint32 ms);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 * Wait a specified number of nanoseconds before returning.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 * This function waits a specified number of nanoseconds before returning. It
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 * waits at least the specified time, but possibly longer due to OS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 * scheduling.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 * \param ns the number of nanoseconds to delay.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 * \sa SDL_Delay
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 * \sa SDL_DelayPrecise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 extern SDL_DECLSPEC void SDLCALL SDL_DelayNS(Uint64 ns);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 * Wait a specified number of nanoseconds before returning.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 * This function waits a specified number of nanoseconds before returning. It
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 * will attempt to wait as close to the requested time as possible, busy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 * waiting if necessary, but could return later due to OS scheduling.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 * \param ns the number of nanoseconds to delay.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 * \sa SDL_Delay
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 * \sa SDL_DelayNS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 extern SDL_DECLSPEC void SDLCALL SDL_DelayPrecise(Uint64 ns);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 * Definition of the timer ID type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 typedef Uint32 SDL_TimerID;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 * Function prototype for the millisecond timer callback function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 * The callback function is passed the current timer interval and returns the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 * next timer interval, in milliseconds. If the returned value is the same as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 * the one passed in, the periodic alarm continues, otherwise a new alarm is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 * scheduled. If the callback returns 0, the periodic alarm is canceled and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 * will be removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 * \param userdata an arbitrary pointer provided by the app through
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 * SDL_AddTimer, for its own use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 * \param timerID the current timer being processed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 * \param interval the current callback time interval.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 * \returns the new callback time interval, or 0 to disable further runs of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 * the callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 * \threadsafety SDL may call this callback at any time from a background
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 * thread; the application is responsible for locking resources
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 * the callback touches that need to be protected.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 * \sa SDL_AddTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 typedef Uint32 (SDLCALL *SDL_TimerCallback)(void *userdata, SDL_TimerID timerID, Uint32 interval);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 * Call a callback function at a future time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 * The callback function is passed the current timer interval and the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 * supplied parameter from the SDL_AddTimer() call and should return the next
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 * timer interval. If the value returned from the callback is 0, the timer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 * canceled and will be removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 * The callback is run on a separate thread, and for short timeouts can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 * potentially be called before this function returns.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 * Timers take into account the amount of time it took to execute the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 * callback. For example, if the callback took 250 ms to execute and returned
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 * 1000 (ms), the timer would only wait another 750 ms before its next
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 * iteration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 * Timing may be inexact due to OS scheduling. Be sure to note the current
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 * time with SDL_GetTicksNS() or SDL_GetPerformanceCounter() in case your
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 * callback needs to adjust for variances.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 * \param interval the timer delay, in milliseconds, passed to `callback`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 * \param callback the SDL_TimerCallback function to call when the specified
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 * `interval` elapses.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 * \param userdata a pointer that is passed to `callback`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 * \returns a timer ID or 0 on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 * \sa SDL_AddTimerNS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 * \sa SDL_RemoveTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 extern SDL_DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *userdata);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 * Function prototype for the nanosecond timer callback function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 * The callback function is passed the current timer interval and returns the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 * next timer interval, in nanoseconds. If the returned value is the same as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 * the one passed in, the periodic alarm continues, otherwise a new alarm is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 * scheduled. If the callback returns 0, the periodic alarm is canceled and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 * will be removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 * \param userdata an arbitrary pointer provided by the app through
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 * SDL_AddTimer, for its own use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 * \param timerID the current timer being processed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 * \param interval the current callback time interval.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 * \returns the new callback time interval, or 0 to disable further runs of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 * the callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 * \threadsafety SDL may call this callback at any time from a background
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 * thread; the application is responsible for locking resources
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 * the callback touches that need to be protected.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 * \sa SDL_AddTimerNS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 typedef Uint64 (SDLCALL *SDL_NSTimerCallback)(void *userdata, SDL_TimerID timerID, Uint64 interval);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 * Call a callback function at a future time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 * The callback function is passed the current timer interval and the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 * supplied parameter from the SDL_AddTimerNS() call and should return the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 * next timer interval. If the value returned from the callback is 0, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 * timer is canceled and will be removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 * The callback is run on a separate thread, and for short timeouts can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 * potentially be called before this function returns.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 * Timers take into account the amount of time it took to execute the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 * callback. For example, if the callback took 250 ns to execute and returned
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 * 1000 (ns), the timer would only wait another 750 ns before its next
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 * iteration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 * Timing may be inexact due to OS scheduling. Be sure to note the current
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 * time with SDL_GetTicksNS() or SDL_GetPerformanceCounter() in case your
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 * callback needs to adjust for variances.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 * \param interval the timer delay, in nanoseconds, passed to `callback`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 * \param callback the SDL_TimerCallback function to call when the specified
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 * `interval` elapses.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 * \param userdata a pointer that is passed to `callback`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 * \returns a timer ID or 0 on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 * \sa SDL_AddTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 * \sa SDL_RemoveTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 extern SDL_DECLSPEC SDL_TimerID SDLCALL SDL_AddTimerNS(Uint64 interval, SDL_NSTimerCallback callback, void *userdata);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 * Remove a timer created with SDL_AddTimer().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 * \param id the ID of the timer to remove.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 * \sa SDL_AddTimer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 extern SDL_DECLSPEC bool SDLCALL SDL_RemoveTimer(SDL_TimerID id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 /* Ends C function definitions when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 #endif /* SDL_timer_h_ */