| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
FRP.Rhine.Clock.Realtime.Millisecond
Description
Provides a clock that ticks at every multiple of a fixed number of milliseconds.
Synopsis
- newtype Millisecond (n :: Nat) = Millisecond (RescaledClockS IO (FixedStep n) UTCTime Bool)
- waitClock :: KnownNat n => Millisecond n
- downsampleMillisecond :: (KnownNat n, Monad m) => ResamplingBuffer m (Millisecond k) (Millisecond (n * k)) a (Vector n a)
- scheduleMillisecond :: Schedule IO (Millisecond n1) (Millisecond n2)
Documentation
newtype Millisecond (n :: Nat) Source #
A clock ticking every n milliseconds,
in real time.
Since n is in the type signature,
it is ensured that when composing two signals on a Millisecond clock,
they will be driven at the same rate.
The tag of this clock is Bool,
where True represents successful realtime,
and False a lag.
Constructors
| Millisecond (RescaledClockS IO (FixedStep n) UTCTime Bool) |
Instances
| Clock IO (Millisecond n) Source # | |
Defined in FRP.Rhine.Clock.Realtime.Millisecond Methods initClock :: Millisecond n -> RunningClockInit IO (Time (Millisecond n)) (Tag (Millisecond n)) Source # | |
| GetClockProxy (Millisecond n) Source # | |
Defined in FRP.Rhine.Clock.Realtime.Millisecond Methods getClockProxy :: ClockProxy (Millisecond n) Source # | |
| type Tag (Millisecond n) Source # | |
Defined in FRP.Rhine.Clock.Realtime.Millisecond | |
| type Time (Millisecond n) Source # | |
Defined in FRP.Rhine.Clock.Realtime.Millisecond | |
waitClock :: KnownNat n => Millisecond n Source #
This implementation measures the time after each tick,
and waits for the remaining time until the next tick.
If the next tick should already have occurred,
the tag is set to False, representing a failed real time attempt.
Note that this clock internally uses threadDelay which can block
for quite a lot longer than the requested time, which can cause
the clock to miss one or more ticks when using low values of n.
When using threadDelay, the difference between the real wait time
and the requested wait time will be larger when using
the '-threaded' ghc option (around 800 microseconds) than when not using
this option (around 100 microseconds). For low values of n it is recommended
that '-threaded' not be used in order to miss less ticks. The clock will adjust
the wait time, up to no wait time at all, to catch up when a tick is missed.
downsampleMillisecond :: (KnownNat n, Monad m) => ResamplingBuffer m (Millisecond k) (Millisecond (n * k)) a (Vector n a) Source #
scheduleMillisecond :: Schedule IO (Millisecond n1) (Millisecond n2) Source #
Two Millisecond clocks can always be scheduled deterministically.