From: <kr_...@us...> - 2003-03-26 02:20:00
|
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 |