Update of /cvsroot/htoolkit/port/src/Port
In directory sc8-pr-cvs1:/tmp/cvs-serv5945/port/src/Port
Modified Files:
Handlers.hs Timer.hs
Log Message:
Efficient implementation for timers
Index: Handlers.hs
===================================================================
RCS file: /cvsroot/htoolkit/port/src/Port/Handlers.hs,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** Handlers.hs 25 Mar 2003 23:23:34 -0000 1.14
--- Handlers.hs 26 Mar 2003 02:19:56 -0000 1.15
***************
*** 32,36 ****
-- * Timers
! ,registerTimer, unregisterTimer, getAllTimerHandles
-- * Windows
--- 32,36 ----
-- * Timers
! ,setTimerHandler, setTimerDefHandler, getTimerHandler, getAllTimerHandles
-- * Windows
***************
*** 589,599 ****
= invokeHandler htimer handlersTimer id
! registerTimer :: TimerHandle -> IO () -> IO ()
! registerTimer htimer handler
= setHandler htimer handler handlersTimer
! unregisterTimer :: TimerHandle -> IO ()
! unregisterTimer htimer
= setDefHandler htimer handlersTimer
getAllTimerHandles :: IO [TimerHandle]
--- 589,603 ----
= invokeHandler htimer handlersTimer id
! setTimerHandler :: TimerHandle -> IO () -> IO ()
! setTimerHandler htimer handler
= setHandler htimer handler handlersTimer
! setTimerDefHandler :: TimerHandle -> IO ()
! setTimerDefHandler htimer
= setDefHandler htimer handlersTimer
+
+ getTimerHandler :: TimerHandle -> IO (IO ())
+ getTimerHandler htimer
+ = getHandler htimer (return ()) handlersTimer
getAllTimerHandles :: IO [TimerHandle]
Index: Timer.hs
===================================================================
RCS file: /cvsroot/htoolkit/port/src/Port/Timer.hs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Timer.hs 17 Feb 2003 23:08:17 -0000 1.1
--- Timer.hs 26 Mar 2003 02:19:57 -0000 1.2
***************
*** 16,45 ****
module Graphics.UI.Port.Timer
( createTimer, destroyTimer
, getAllTimerHandles, destroyAllTimers
) where
- import Prelude hiding (lookup)
import Graphics.UI.Port.Types
! import Graphics.UI.Port.PtrMap
! import Graphics.UI.Port.Handlers(registerTimer, unregisterTimer, getAllTimerHandles)
! import System.IO.Unsafe( unsafePerformIO )
! import Control.Concurrent.MVar
-- | Create a timer with a handler that is called on a specified milli-second interval.
! createTimer :: Int -> IO () -> IO TimerHandle
! createTimer msecs handler = do
! htimer <- osCreateTimer msecs
! registerTimer htimer handler
! return htimer
! foreign import ccall osCreateTimer :: Int -> IO TimerHandle
-- | Destroy a timer and automatically unregister its event handler.
destroyTimer :: TimerHandle -> IO ()
destroyTimer htimer = do
! unregisterTimer htimer
! osDestroyTimer htimer
foreign import ccall osDestroyTimer :: TimerHandle -> IO ()
-- Destroy all timers (called by quit).
destroyAllTimers :: IO ()
! destroyAllTimers = getAllTimerHandles >>= mapM_ osDestroyTimer
--- 16,50 ----
module Graphics.UI.Port.Timer
( createTimer, destroyTimer
+ , setTimerInterval, getTimerInterval
+ , enableTimer, isTimerEnabled
, getAllTimerHandles, destroyAllTimers
) where
import Graphics.UI.Port.Types
! import Graphics.UI.Port.Handlers(setTimerDefHandler, getAllTimerHandles)
-- | Create a timer with a handler that is called on a specified milli-second interval.
! foreign import ccall "osCreateTimer" createTimer :: Int -> IO TimerHandle
-- | Destroy a timer and automatically unregister its event handler.
destroyTimer :: TimerHandle -> IO ()
destroyTimer htimer = do
! setTimerDefHandler htimer
! osDestroyTimer htimer
foreign import ccall osDestroyTimer :: TimerHandle -> IO ()
+ -- | Change the delay time for the timer
+ foreign import ccall "osSetTimerInterval" setTimerInterval :: TimerHandle -> Int -> IO ()
+
+ -- | Get the delay time for the timer
+ foreign import ccall "osGetTimerInterval" getTimerInterval :: TimerHandle -> IO Int
+
+ -- | Enable\/disable timer
+ foreign import ccall "osEnableTimer" enableTimer :: TimerHandle -> Bool -> IO ()
+
+ -- | Returns True when the timer is enabled.
+ foreign import ccall "osIsTimerEnabled" isTimerEnabled :: TimerHandle -> IO Bool
+
-- Destroy all timers (called by quit).
destroyAllTimers :: IO ()
! destroyAllTimers = getAllTimerHandles >>= mapM_ destroyTimer
|