From 577f8a21ded3a49c799ee49b90508801f1361842 Mon Sep 17 00:00:00 2001 From: seh Date: Mon, 18 Mar 2019 15:42:43 -0500 Subject: add spawn and channels examples --- Channels/chans.b | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'Channels/chans.b') diff --git a/Channels/chans.b b/Channels/chans.b index 82945c8..700ea63 100644 --- a/Channels/chans.b +++ b/Channels/chans.b @@ -10,11 +10,46 @@ Chans: module { init: fn(nil: ref Draw->Context, nil: list of string); }; +summer(done: chan of int, msg: chan of string, num: chan of (int, int)) { + sum := big 0; + run := 1; + + while(run) + alt { + (n, p) := <-num => + sum += big n**p; + print("Sum: %bd\n", sum); + <-done => + msg <-= string sum; + run = 0; + * => + sys->sleep(5); + } +} + init(nil: ref Draw->Context, nil: list of string) { sys = load Sys Sys->PATH; - + n := 4; + done := chan of int; + msgChan := chan[0] of string; + numChan := chan[n] of (int, int); + + spawn summer(done, msgChan, numChan); + + for(i := 0; i < 15; i++) + numChan <-= (i, 2); + + done <-= 0; + + print("Final sum: %s\n", <-msgChan); + + buf := chan[20] of int; + + print("Len: %d\n", len buf); + + for(i = 0; i < 5; i++) + buf <-= i; exit; } - -- cgit v1.2.3