summaryrefslogtreecommitdiff
path: root/events/timer.ml
diff options
context:
space:
mode:
Diffstat (limited to 'events/timer.ml')
-rwxr-xr-xevents/timer.ml24
1 files changed, 24 insertions, 0 deletions
diff --git a/events/timer.ml b/events/timer.ml
new file mode 100755
index 0000000..def9a81
--- /dev/null
+++ b/events/timer.ml
@@ -0,0 +1,24 @@
+type t = Brr.G.timer_id ref * unit Note.E.send
+
+let create
+ : unit -> (t * unit Note.E.t)
+ = fun () ->
+ let event, send = Note.E.create () in
+ (ref (-1), send), event
+
+let stop
+ : t -> unit
+ = fun (id, _) ->
+ Brr.G.stop_timer !id
+
+let start
+ : t -> float -> unit
+ = fun (id, send) d ->
+
+ Brr.G.stop_timer !id;
+ let timer_id = Brr.G.set_interval
+ ~ms:(int_of_float @@ d *. 1000.)
+ (fun () -> send ()) in
+ ignore @@ Brr.G.set_timeout ~ms:0 send;
+ id:= timer_id;
+