test/testtimer.c
author Sam Lantinga <slouken@libsdl.org>
Sun, 07 May 2006 03:40:06 +0000
changeset 1769 290b5baf2fca
parent 1615 d5298e8f22b3
child 1662 782fd950bd46
child 1895 c121d94672cb
permissions -rw-r--r--
Fixed bug #215

The current SVN trunk is missing the SDLCALL specifier at numerous locations.

It has to be added for all (possibly user provided) callbacks.

I stumbled over this while creating a makefile for the OpenWatcom compiler for
Win32.
     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 }