1/* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2006 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21*/ 22#include "SDL_config.h" 23 24#ifdef SDL_TIMER_BEOS 25 26#include <be/kernel/OS.h> 27 28#include "SDL_thread.h" 29#include "SDL_timer.h" 30#include "../SDL_timer_c.h" 31 32static bigtime_t start; 33 34void SDL_StartTicks(void) 35{ 36 /* Set first ticks value */ 37 start = system_time(); 38} 39 40Uint32 SDL_GetTicks(void) 41{ 42 return((system_time()-start)/1000); 43} 44 45void SDL_Delay(Uint32 ms) 46{ 47 snooze(ms*1000); 48} 49 50/* Data to handle a single periodic alarm */ 51static int timer_alive = 0; 52static SDL_Thread *timer = NULL; 53 54static int RunTimer(void *unused) 55{ 56 while ( timer_alive ) { 57 if ( SDL_timer_running ) { 58 SDL_ThreadedTimerCheck(); 59 } 60 SDL_Delay(10); 61 } 62 return(0); 63} 64 65/* This is only called if the event thread is not running */ 66int SDL_SYS_TimerInit(void) 67{ 68 timer_alive = 1; 69 timer = SDL_CreateThread(RunTimer, NULL); 70 if ( timer == NULL ) 71 return(-1); 72 return(SDL_SetTimerThreaded(1)); 73} 74 75void SDL_SYS_TimerQuit(void) 76{ 77 timer_alive = 0; 78 if ( timer ) { 79 SDL_WaitThread(timer, NULL); 80 timer = NULL; 81 } 82} 83 84int SDL_SYS_StartTimer(void) 85{ 86 SDL_SetError("Internal logic error: BeOS uses threaded timer"); 87 return(-1); 88} 89 90void SDL_SYS_StopTimer(void) 91{ 92 return; 93} 94 95#endif /* SDL_TIMER_BEOS */ 96