haskore-realtime-0.1: src/Haskore/RealTime/Timer/Posix.hs
module Haskore.RealTime.Timer.Posix (timer) where
import qualified Haskore.RealTime.Timer as Timer
import System.Time(getClockTime)
import System.Posix.Unistd(usleep)
import qualified Numeric.NonNegative.Wrapper as NonNeg
timer :: Timer.T IO
timer = Timer.Cons getClockTime wait resolution
{-
sleep can be aborted with CTRL-C, but measures in seconds.
usleep measures in micro-seconds, but is unbreakable.
Non is appropriate.
-}
wait :: NonNeg.Int -> IO ()
wait delay =
-- putStrLn ("wait " ++ show delay) >>
-- usleep (delay*unit)
usleep (NonNeg.toNumber delay)
-- sleep delay >> return ()
resolution :: Num a => a
resolution = 10^(6::Int)
{-
unit :: Int
unit = div (10^(6::Int)) resolution
-}