SDL_systimer.cpp
上传用户: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. /*
  19.     SDL_systimer.cpp
  20.     Epoc version by Hannu Viitala (hannu.j.viitala@mbnet.fi)
  21. */
  22. #include <e32std.h>
  23. #include <e32hal.h>
  24. extern "C" {
  25. #include "SDL_error.h"
  26. #include "SDL_thread.h"
  27. #include "SDL_timer.h"
  28. #include "SDL_timer_c.h"
  29. static TUint start = 0;
  30. static TInt tickPeriodMilliSeconds;
  31. void SDL_StartTicks(void)
  32. {
  33. /* Set first ticks value */
  34.     start = User::TickCount();
  35.     TTimeIntervalMicroSeconds32 period;
  36. TInt tmp = UserHal::TickPeriod(period);
  37.     tickPeriodMilliSeconds = period.Int() / 1000;
  38. }
  39. Uint32 SDL_GetTicks(void)
  40. {
  41.     TUint deltaTics = User::TickCount() - start;
  42. return(deltaTics * tickPeriodMilliSeconds); 
  43. }
  44. void SDL_Delay(Uint32 ms)
  45. {
  46.      
  47.     User::After(TTimeIntervalMicroSeconds32(ms*1000));
  48. }
  49. /* Data to handle a single periodic alarm */
  50. static int timer_alive = 0;
  51. static SDL_Thread *timer = NULL;
  52. static int RunTimer(void *unused)
  53. {
  54. Uint32 ms;
  55. while ( timer_alive ) {
  56. if ( SDL_timer_running ) {
  57. SDL_ThreadedTimerCheck();
  58. }
  59. SDL_Delay(10);
  60. }
  61. return(0);
  62. }
  63. /* This is only called if the event thread is not running */
  64. int SDL_SYS_TimerInit(void)
  65. {
  66. timer_alive = 1;
  67. timer = SDL_CreateThread(RunTimer, NULL);
  68. if ( timer == NULL )
  69. return(-1);
  70. return(SDL_SetTimerThreaded(1));
  71. }
  72. void SDL_SYS_TimerQuit(void)
  73. {
  74. timer_alive = 0;
  75. if ( timer ) {
  76. SDL_WaitThread(timer, NULL);
  77. timer = NULL;
  78. }
  79. }
  80. int SDL_SYS_StartTimer(void)
  81. {
  82. SDL_SetError("Internal logic error: Epoc uses threaded timer");
  83. return(-1);
  84. }
  85. void SDL_SYS_StopTimer(void)
  86. {
  87. return;
  88. }
  89. }; // extern "C"