5 | module System.UV.Timer
7 | import IO.Async.Event
8 | import System.UV.Loop
9 | import System.UV.Pointer
10 | import System.UV.Raw.Handle
11 | import System.UV.Raw.Timer
15 | %inline stopTimer : HasIO io => Ptr Timer -> io ()
16 | stopTimer = ignore . uv_timer_stop
18 | parameters {auto cc : CloseCB}
20 | Resource (Ptr Timer) where
21 | release h = stopTimer h >> uv_close h cc
23 | parameters {auto l : UVLoop}
24 | {auto has : Has UVError es}
26 | mkTimer : Async es (Ptr Timer)
27 | mkTimer = mallocPtr Timer >>= uvAct (uv_timer_init l.loop)
33 | (timeout,repeat : Bits64)
34 | -> (Event Nat -> Async es a)
36 | repeatedly t r run =
37 | use1 mkTimer $
\pt => do
39 | uv $
uv_timer_start pt (\_ => send ev 1 id (+)) t r
44 | sleep : (timeout : Bits64) -> Async es ()
47 | mkTimer stopTimer release (\p,cb => uv_timer_start p (\_ => cb ()) t 0)