happstack-util-6.0.3: src/Happstack/Util/Cron.hs
module Happstack.Util.Cron (cron) where
import Control.Concurrent (threadDelay)
type Seconds = Int
-- | Given an action f and a number of seconds t, cron will execute
-- f every t seconds with the first execution t seconds after cron is called.
-- cron does not spawn a new thread.
cron :: Seconds -> IO () -> IO a
cron seconds0 action = loop seconds0
where maxSeconds = (maxBound :: Int) `div` 10^(6 ::Int)
loop seconds =
if seconds <= maxSeconds
then do threadDelay (10^(6 :: Int) * seconds)
action
loop seconds0
else do threadDelay (10^(6 :: Int) * maxSeconds)
loop (seconds - maxSeconds)