SDL_systimer.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

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