Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | |
2 | structure Main = | |
3 | struct | |
4 | open CML | |
5 | ||
6 | fun pong ch = | |
7 | let | |
8 | fun loop () = | |
9 | let | |
10 | val () = recv ch | |
11 | in | |
12 | loop () | |
13 | end | |
14 | val _ = spawn (fn () => loop ()) | |
15 | in | |
16 | () | |
17 | end | |
18 | ||
19 | fun ping ch n = | |
20 | let | |
21 | fun loop i = | |
22 | if i > n then RunCML.shutdown OS.Process.success | |
23 | else let | |
24 | val () = send (ch, ()) | |
25 | in | |
26 | loop (i + 1) | |
27 | end | |
28 | val _ = spawn (fn () => loop 0) | |
29 | in | |
30 | () | |
31 | end | |
32 | ||
33 | fun doit n = | |
34 | RunCML.doit | |
35 | (fn () => | |
36 | let | |
37 | val ch = channel () | |
38 | val () = pong ch | |
39 | val () = ping ch n | |
40 | in | |
41 | () | |
42 | end, | |
43 | SOME (Time.fromMilliseconds 10)) | |
44 | end |