Mercurial > sdl-ios-xcode
comparison src/timer/riscos/SDL_systimer.c @ 1668:4da1ee79c9af SDL-1.3
more tweaking indent options
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 29 May 2006 04:04:35 +0000 |
parents | 782fd950bd46 |
children |
comparison
equal
deleted
inserted
replaced
1667:1fddae038bc8 | 1668:4da1ee79c9af |
---|---|
35 | 35 |
36 #if SDL_THREADS_DISABLED | 36 #if SDL_THREADS_DISABLED |
37 /* Timer SDL_arraysize(Timer ),start/reset time */ | 37 /* Timer SDL_arraysize(Timer ),start/reset time */ |
38 static Uint32 timerStart; | 38 static Uint32 timerStart; |
39 /* Timer running function */ | 39 /* Timer running function */ |
40 void RISCOS_CheckTimer (); | 40 void RISCOS_CheckTimer(); |
41 #else | 41 #else |
42 #include <pthread.h> | 42 #include <pthread.h> |
43 extern Uint32 riscos_main_thread; | 43 extern Uint32 riscos_main_thread; |
44 extern int riscos_using_threads; | 44 extern int riscos_using_threads; |
45 extern Uint32 SDL_ThreadID (); | 45 extern Uint32 SDL_ThreadID(); |
46 extern Uint32 SDL_EventThreadID (void); | 46 extern Uint32 SDL_EventThreadID(void); |
47 #endif | 47 #endif |
48 | 48 |
49 | 49 |
50 extern void RISCOS_BackgroundTasks (void); | 50 extern void RISCOS_BackgroundTasks(void); |
51 | 51 |
52 /* The first ticks value of the application */ | 52 /* The first ticks value of the application */ |
53 clock_t start; | 53 clock_t start; |
54 | 54 |
55 void | 55 void |
56 SDL_StartTicks (void) | 56 SDL_StartTicks(void) |
57 { | 57 { |
58 /* Set first ticks value */ | 58 /* Set first ticks value */ |
59 start = clock (); | 59 start = clock(); |
60 } | 60 } |
61 | 61 |
62 Uint32 | 62 Uint32 |
63 SDL_GetTicks (void) | 63 SDL_GetTicks(void) |
64 { | 64 { |
65 clock_t ticks; | 65 clock_t ticks; |
66 | 66 |
67 ticks = clock () - start; | 67 ticks = clock() - start; |
68 | 68 |
69 | 69 |
70 #if CLOCKS_PER_SEC == 1000 | 70 #if CLOCKS_PER_SEC == 1000 |
71 | 71 |
72 return (ticks); | 72 return (ticks); |
82 #endif | 82 #endif |
83 | 83 |
84 } | 84 } |
85 | 85 |
86 void | 86 void |
87 SDL_Delay (Uint32 ms) | 87 SDL_Delay(Uint32 ms) |
88 { | 88 { |
89 Uint32 now, then, elapsed; | 89 Uint32 now, then, elapsed; |
90 #if !SDL_THREADS_DISABLED | 90 #if !SDL_THREADS_DISABLED |
91 int is_event_thread; | 91 int is_event_thread; |
92 if (riscos_using_threads) { | 92 if (riscos_using_threads) { |
93 is_event_thread = 0; | 93 is_event_thread = 0; |
94 if (SDL_EventThreadID ()) { | 94 if (SDL_EventThreadID()) { |
95 if (SDL_EventThreadID () == SDL_ThreadID ()) | 95 if (SDL_EventThreadID() == SDL_ThreadID()) |
96 is_event_thread = 1; | 96 is_event_thread = 1; |
97 } else if (SDL_ThreadID () == riscos_main_thread) | 97 } else if (SDL_ThreadID() == riscos_main_thread) |
98 is_event_thread = 1; | 98 is_event_thread = 1; |
99 } else | 99 } else |
100 is_event_thread = 1; | 100 is_event_thread = 1; |
101 #endif | 101 #endif |
102 | 102 |
103 /*TODO: Next version of Unixlib may allow us to use usleep here */ | 103 /*TODO: Next version of Unixlib may allow us to use usleep here */ |
104 /* for non event threads */ | 104 /* for non event threads */ |
105 | 105 |
106 /* Set the timeout interval - Linux only needs to do this once */ | 106 /* Set the timeout interval - Linux only needs to do this once */ |
107 then = SDL_GetTicks (); | 107 then = SDL_GetTicks(); |
108 | 108 |
109 do { | 109 do { |
110 /* Do background tasks required while sleeping as we are not multithreaded */ | 110 /* Do background tasks required while sleeping as we are not multithreaded */ |
111 #if SDL_THREADS_DISABLED | 111 #if SDL_THREADS_DISABLED |
112 RISCOS_BackgroundTasks (); | 112 RISCOS_BackgroundTasks(); |
113 #else | 113 #else |
114 /* For threaded build only run background tasks in event thread */ | 114 /* For threaded build only run background tasks in event thread */ |
115 if (is_event_thread) | 115 if (is_event_thread) |
116 RISCOS_BackgroundTasks (); | 116 RISCOS_BackgroundTasks(); |
117 #endif | 117 #endif |
118 | 118 |
119 /* Calculate the time interval left (in case of interrupt) */ | 119 /* Calculate the time interval left (in case of interrupt) */ |
120 now = SDL_GetTicks (); | 120 now = SDL_GetTicks(); |
121 elapsed = (now - then); | 121 elapsed = (now - then); |
122 then = now; | 122 then = now; |
123 if (elapsed >= ms) { | 123 if (elapsed >= ms) { |
124 break; | 124 break; |
125 } | 125 } |
126 ms -= elapsed; | 126 ms -= elapsed; |
127 #if !SDL_THREADS_DISABLED | 127 #if !SDL_THREADS_DISABLED |
128 /* Need to yield to let other threads have a go */ | 128 /* Need to yield to let other threads have a go */ |
129 if (riscos_using_threads) | 129 if (riscos_using_threads) |
130 pthread_yield (); | 130 pthread_yield(); |
131 #endif | 131 #endif |
132 | 132 |
133 } | 133 } |
134 while (1); | 134 while (1); |
135 } | 135 } |
137 #if SDL_THREADS_DISABLED | 137 #if SDL_THREADS_DISABLED |
138 | 138 |
139 /* Non-threaded version of timer */ | 139 /* Non-threaded version of timer */ |
140 | 140 |
141 int | 141 int |
142 SDL_SYS_TimerInit (void) | 142 SDL_SYS_TimerInit(void) |
143 { | 143 { |
144 return (0); | 144 return (0); |
145 } | 145 } |
146 | 146 |
147 void | 147 void |
148 SDL_SYS_TimerQuit (void) | 148 SDL_SYS_TimerQuit(void) |
149 { | 149 { |
150 SDL_SetTimer (0, NULL); | 150 SDL_SetTimer(0, NULL); |
151 } | 151 } |
152 | 152 |
153 int | 153 int |
154 SDL_SYS_StartTimer (void) | 154 SDL_SYS_StartTimer(void) |
155 { | 155 { |
156 timerStart = SDL_GetTicks (); | 156 timerStart = SDL_GetTicks(); |
157 | 157 |
158 return (0); | 158 return (0); |
159 } | 159 } |
160 | 160 |
161 void | 161 void |
162 SDL_SYS_StopTimer (void) | 162 SDL_SYS_StopTimer(void) |
163 { | 163 { |
164 /* Don't need to do anything as we use SDL_timer_running | 164 /* Don't need to do anything as we use SDL_timer_running |
165 to detect if we need to check the timer */ | 165 to detect if we need to check the timer */ |
166 } | 166 } |
167 | 167 |
168 | 168 |
169 void | 169 void |
170 RISCOS_CheckTimer () | 170 RISCOS_CheckTimer() |
171 { | 171 { |
172 if (SDL_timer_running | 172 if (SDL_timer_running |
173 && SDL_GetTicks () - timerStart >= SDL_alarm_interval) { | 173 && SDL_GetTicks() - timerStart >= SDL_alarm_interval) { |
174 Uint32 ms; | 174 Uint32 ms; |
175 | 175 |
176 ms = SDL_alarm_callback (SDL_alarm_interval); | 176 ms = SDL_alarm_callback(SDL_alarm_interval); |
177 if (ms != SDL_alarm_interval) { | 177 if (ms != SDL_alarm_interval) { |
178 if (ms) { | 178 if (ms) { |
179 SDL_alarm_interval = ROUND_RESOLUTION (ms); | 179 SDL_alarm_interval = ROUND_RESOLUTION(ms); |
180 } else { | 180 } else { |
181 SDL_alarm_interval = 0; | 181 SDL_alarm_interval = 0; |
182 SDL_timer_running = 0; | 182 SDL_timer_running = 0; |
183 } | 183 } |
184 } | 184 } |
185 if (SDL_alarm_interval) | 185 if (SDL_alarm_interval) |
186 timerStart = SDL_GetTicks (); | 186 timerStart = SDL_GetTicks(); |
187 } | 187 } |
188 } | 188 } |
189 | 189 |
190 #else | 190 #else |
191 | 191 |
196 /* Data to handle a single periodic alarm */ | 196 /* Data to handle a single periodic alarm */ |
197 static int timer_alive = 0; | 197 static int timer_alive = 0; |
198 static SDL_Thread *timer = NULL; | 198 static SDL_Thread *timer = NULL; |
199 | 199 |
200 static int | 200 static int |
201 RunTimer (void *unused) | 201 RunTimer(void *unused) |
202 { | 202 { |
203 while (timer_alive) { | 203 while (timer_alive) { |
204 if (SDL_timer_running) { | 204 if (SDL_timer_running) { |
205 SDL_ThreadedTimerCheck (); | 205 SDL_ThreadedTimerCheck(); |
206 } | 206 } |
207 SDL_Delay (1); | 207 SDL_Delay(1); |
208 } | 208 } |
209 return (0); | 209 return (0); |
210 } | 210 } |
211 | 211 |
212 /* This is only called if the event thread is not running */ | 212 /* This is only called if the event thread is not running */ |
213 int | 213 int |
214 SDL_SYS_TimerInit (void) | 214 SDL_SYS_TimerInit(void) |
215 { | 215 { |
216 timer_alive = 1; | 216 timer_alive = 1; |
217 timer = SDL_CreateThread (RunTimer, NULL); | 217 timer = SDL_CreateThread(RunTimer, NULL); |
218 if (timer == NULL) | 218 if (timer == NULL) |
219 return (-1); | 219 return (-1); |
220 return (SDL_SetTimerThreaded (1)); | 220 return (SDL_SetTimerThreaded(1)); |
221 } | 221 } |
222 | 222 |
223 void | 223 void |
224 SDL_SYS_TimerQuit (void) | 224 SDL_SYS_TimerQuit(void) |
225 { | 225 { |
226 timer_alive = 0; | 226 timer_alive = 0; |
227 if (timer) { | 227 if (timer) { |
228 SDL_WaitThread (timer, NULL); | 228 SDL_WaitThread(timer, NULL); |
229 timer = NULL; | 229 timer = NULL; |
230 } | 230 } |
231 } | 231 } |
232 | 232 |
233 int | 233 int |
234 SDL_SYS_StartTimer (void) | 234 SDL_SYS_StartTimer(void) |
235 { | 235 { |
236 SDL_SetError ("Internal logic error: RISC OS uses threaded timer"); | 236 SDL_SetError("Internal logic error: RISC OS uses threaded timer"); |
237 return (-1); | 237 return (-1); |
238 } | 238 } |
239 | 239 |
240 void | 240 void |
241 SDL_SYS_StopTimer (void) | 241 SDL_SYS_StopTimer(void) |
242 { | 242 { |
243 return; | 243 return; |
244 } | 244 } |
245 | 245 |
246 #endif /* SDL_THREADS_DISABLED */ | 246 #endif /* SDL_THREADS_DISABLED */ |