Mercurial > sdl-ios-xcode
view test/testtimer.c @ 3202:3aa519a5c676
I've made so many changes I don't dare continue until I check the current stuff in.
/test/testatomic.c performs absolutely basic tests to show that the function work as expected. Need a second test to do more detailed tests.
/include/SDL_atomic.h provides declarations for all included functions.
/src/atomic/linux/SDL_atomic.c provided all the functions. On a generic built the 64 bit functions work, but they are emulated. On a build for -march=pentium and above the 64 bit functions use native instructions
/src/atomic/dummy/SDL_atomic.c emulates all the operations using SDL_mutex.h.
/src/atomic/win32/SDL_atomic.c is a copy of dummy
/src/atomic/macosx/SDL_atomic.s is a copy of dummy
These versions of SDL_atomic.c provide a frame work for building the library with a mixture of native and emulated functions. This allows the whole library to be provided on all platforms. (I hope.)
I hope this fits with the SDL philosophy of either providing a common subset or emulating when the platform is missing a feature.
I have not added dummy, macosx, or win32 to the build. They are there as place holders for future work.
I have modified congifure.in to compile sources in /src/atomic/linux. (The SDL configure.in file is an amazing piece of work and I hope I didn't mess it up. :-)
author | Bob Pendleton <bob@pendleton.com> |
---|---|
date | Mon, 29 Jun 2009 19:54:43 +0000 |
parents | c121d94672cb |
children |
line wrap: on
line source
/* Test program to check the resolution of the SDL timer on the current platform */ #include <stdlib.h> #include <stdio.h> #include "SDL.h" #define DEFAULT_RESOLUTION 1 static int ticks = 0; static Uint32 SDLCALL ticktock(Uint32 interval) { ++ticks; return (interval); } static Uint32 SDLCALL callback(Uint32 interval, void *param) { printf("Timer %d : param = %d\n", interval, (int) (uintptr_t) param); return interval; } int main(int argc, char *argv[]) { int desired; SDL_TimerID t1, t2, t3; if (SDL_Init(SDL_INIT_TIMER) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); return (1); } /* Start the timer */ desired = 0; if (argv[1]) { desired = atoi(argv[1]); } if (desired == 0) { desired = DEFAULT_RESOLUTION; } SDL_SetTimer(desired, ticktock); /* Wait 10 seconds */ printf("Waiting 10 seconds\n"); SDL_Delay(10 * 1000); /* Stop the timer */ SDL_SetTimer(0, NULL); /* Print the results */ if (ticks) { fprintf(stderr, "Timer resolution: desired = %d ms, actual = %f ms\n", desired, (double) (10 * 1000) / ticks); } /* Test multiple timers */ printf("Testing multiple timers...\n"); t1 = SDL_AddTimer(100, callback, (void *) 1); if (!t1) fprintf(stderr, "Could not create timer 1: %s\n", SDL_GetError()); t2 = SDL_AddTimer(50, callback, (void *) 2); if (!t2) fprintf(stderr, "Could not create timer 2: %s\n", SDL_GetError()); t3 = SDL_AddTimer(233, callback, (void *) 3); if (!t3) fprintf(stderr, "Could not create timer 3: %s\n", SDL_GetError()); /* Wait 10 seconds */ printf("Waiting 10 seconds\n"); SDL_Delay(10 * 1000); printf("Removing timer 1 and waiting 5 more seconds\n"); SDL_RemoveTimer(t1); SDL_Delay(5 * 1000); SDL_RemoveTimer(t2); SDL_RemoveTimer(t3); SDL_Quit(); return (0); }