From 4e8c0b46125482d25884b0f534eef1d72346c898 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 24 Mar 2012 16:01:53 -0400 Subject: [PATCH] Example for os2 --- os2-example.rkt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 os2-example.rkt diff --git a/os2-example.rkt b/os2-example.rkt new file mode 100644 index 0000000..fba4fbe --- /dev/null +++ b/os2-example.rkt @@ -0,0 +1,30 @@ +#lang racket/base +;; Trivial demonstration of an os2.rkt virtual machine. + +(require "os2.rkt") +(require racket/pretty) + +(define (super-alarm msecs) + (wrap-evt (alarm-evt msecs) (lambda (_) (current-inexact-milliseconds)))) + +(define (sleep n k) + (transition k + (add-role (topic-subscriber (super-alarm (+ (current-inexact-milliseconds) n))) + (handlers #f #f (lambda (eid topic now) + (lambda (k) + (extend-transition (k) + (delete-role eid)))))))) + +(define (example-process delay) + (write `(sleeping for ,delay milliseconds)) + (newline) + (sleep delay (lambda () + (write `(awoke after ,delay milliseconds)) + (newline) + (transition 'no-state (kill))))) + +(ground-vm (lambda () + (transition 'no-state + (spawn (lambda () (example-process 1000))) + (spawn (lambda () (example-process 2000))) + (kill))))