|
1 |
|
2 /* Test program to check the resolution of the SDL timer on the current |
|
3 platform |
|
4 */ |
|
5 |
|
6 #include <stdlib.h> |
|
7 #include <stdio.h> |
|
8 |
|
9 #include "SDL.h" |
|
10 |
|
11 #define DEFAULT_RESOLUTION 1 |
|
12 |
|
13 static int ticks = 0; |
|
14 |
|
15 static Uint32 SDLCALL ticktock(Uint32 interval) |
|
16 { |
|
17 ++ticks; |
|
18 return(interval); |
|
19 } |
|
20 |
|
21 static Uint32 SDLCALL callback(Uint32 interval, void *param) |
|
22 { |
|
23 printf("Timer %d : param = %d\n", interval, (int)(uintptr_t)param); |
|
24 return interval; |
|
25 } |
|
26 |
|
27 int main(int argc, char *argv[]) |
|
28 { |
|
29 int desired; |
|
30 SDL_TimerID t1, t2, t3; |
|
31 |
|
32 if ( SDL_Init(SDL_INIT_TIMER) < 0 ) { |
|
33 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); |
|
34 return(1); |
|
35 } |
|
36 |
|
37 /* Start the timer */ |
|
38 desired = 0; |
|
39 if ( argv[1] ) { |
|
40 desired = atoi(argv[1]); |
|
41 } |
|
42 if ( desired == 0 ) { |
|
43 desired = DEFAULT_RESOLUTION; |
|
44 } |
|
45 SDL_SetTimer(desired, ticktock); |
|
46 |
|
47 /* Wait 10 seconds */ |
|
48 printf("Waiting 10 seconds\n"); |
|
49 SDL_Delay(10*1000); |
|
50 |
|
51 /* Stop the timer */ |
|
52 SDL_SetTimer(0, NULL); |
|
53 |
|
54 /* Print the results */ |
|
55 if ( ticks ) { |
|
56 fprintf(stderr, |
|
57 "Timer resolution: desired = %d ms, actual = %f ms\n", |
|
58 desired, (double)(10*1000)/ticks); |
|
59 } |
|
60 |
|
61 /* Test multiple timers */ |
|
62 printf("Testing multiple timers...\n"); |
|
63 t1 = SDL_AddTimer(100, callback, (void*)1); |
|
64 if(!t1) |
|
65 fprintf(stderr,"Could not create timer 1: %s\n", SDL_GetError()); |
|
66 t2 = SDL_AddTimer(50, callback, (void*)2); |
|
67 if(!t2) |
|
68 fprintf(stderr,"Could not create timer 2: %s\n", SDL_GetError()); |
|
69 t3 = SDL_AddTimer(233, callback, (void*)3); |
|
70 if(!t3) |
|
71 fprintf(stderr,"Could not create timer 3: %s\n", SDL_GetError()); |
|
72 |
|
73 /* Wait 10 seconds */ |
|
74 printf("Waiting 10 seconds\n"); |
|
75 SDL_Delay(10*1000); |
|
76 |
|
77 printf("Removing timer 1 and waiting 5 more seconds\n"); |
|
78 SDL_RemoveTimer(t1); |
|
79 |
|
80 SDL_Delay(5*1000); |
|
81 |
|
82 SDL_RemoveTimer(t2); |
|
83 SDL_RemoveTimer(t3); |
|
84 |
|
85 SDL_Quit(); |
|
86 return(0); |
|
87 } |