annotate tests/spawn.ur @ 697:755a71c99be5

Threads demo
author Adam Chlipala <adamc@hcoop.net>
date Sun, 05 Apr 2009 10:48:11 -0400
parents 7ea0df9e56b6
children
rev   line source
adamc@694 1 table t : {A : int, Ch : channel string}
adamc@694 2
adamc@694 3 fun listener n ch =
adamc@694 4 s <- recv ch;
adamc@694 5 alert (show n ^ ": " ^ s);
adamc@694 6 listener n ch
adamc@694 7
adamc@694 8 fun speak id msg =
adamc@694 9 r <- oneRow (SELECT t.Ch FROM t WHERE t.A = {[id]});
adamc@694 10 send r.T.Ch msg
adamc@694 11
adamc@694 12 fun main () : transaction page =
adamc@694 13 ch1 <- channel;
adamc@694 14 dml (INSERT INTO t (A, Ch) VALUES (1, {[ch1]}));
adamc@694 15 ch2 <- channel;
adamc@694 16 dml (INSERT INTO t (A, Ch) VALUES (2, {[ch2]}));
adamc@694 17
adamc@694 18 s1 <- source "";
adamc@694 19 s2 <- source "";
adamc@694 20
adamc@694 21 return <xml><body onload={spawn (listener 1 ch1); spawn (listener 2 ch2)}>
adamc@694 22 1: <ctextbox source={s1}/><button onclick={msg <- get s1; speak 1 msg}/><br/>
adamc@694 23 2: <ctextbox source={s2}/><button onclick={msg <- get s2; speak 2 msg}/>
adamc@694 24 </body></xml>