syndicate-2017/racket/syndicate/examples/actor/timestate.rkt

29 lines
1.0 KiB
Racket

#lang syndicate
(require/activate syndicate/drivers/timestate)
(spawn #:name 'demo-timeout
(on-start (printf "Starting demo-timeout\n"))
(on-stop (printf "Stopping demo-timeout\n"))
(stop-when-timeout 3000 (printf "Three second timeout fired\n")))
(spawn #:name 'demo-later-than
(on-start (printf "Starting demo-later-than\n"))
(on-stop (printf "Stopping demo-later-than\n"))
(field [deadline (+ (current-inexact-milliseconds) 5000)])
(stop-when (asserted (later-than (deadline)))
(printf "Deadline expired\n")))
(spawn #:name 'demo-updating-later-than
(field [deadline (current-inexact-milliseconds)])
(field [counter 0])
(on #:when (< (counter) 10) (asserted (later-than (deadline)))
(printf "Tick ~v\n" (counter))
(counter (+ (counter) 1))
(deadline (+ (deadline) 1000))))
(spawn* #:name 'demo-sleep
(for [(counter (in-range 10))]
(printf "Sleeping tick ~v\n" counter)
(sleep 1.0)))