| 1 | import x.executor |
| 2 | |
| 3 | fn main() { |
| 4 | mut ex := executor.new(queue_size: 8)! |
| 5 | events := chan int{cap: 6} |
| 6 | |
| 7 | for i in 0 .. 6 { |
| 8 | ex.try_post(fn [events, i] () ! { |
| 9 | events <- i |
| 10 | })! |
| 11 | } |
| 12 | |
| 13 | mut frame := 0 |
| 14 | mut drained_total := 0 |
| 15 | for drained_total < 6 { |
| 16 | frame++ |
| 17 | drained := ex.drain_pending(2)! |
| 18 | if drained == 0 { |
| 19 | eprintln('frame ${frame} did not drain any work') |
| 20 | exit(1) |
| 21 | } |
| 22 | drained_total += drained |
| 23 | println('frame ${frame}: drained ${drained} owner jobs') |
| 24 | } |
| 25 | |
| 26 | mut checksum := 0 |
| 27 | for _ in 0 .. 6 { |
| 28 | checksum += <-events |
| 29 | } |
| 30 | println('checksum=${checksum}') |
| 31 | |
| 32 | ex.stop() |
| 33 | if ex.drain_pending(1)! != 0 { |
| 34 | eprintln('unexpected job after stop') |
| 35 | exit(1) |
| 36 | } |
| 37 | ex.wait()! |
| 38 | } |
| 39 | |