| 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 | } |