vxx2 / vlib / x / executor / examples / owner_loop_pump.v
38 lines · 33 sloc · 675 bytes · e80386b6af8a071a2e13fd654ebcdb2105fb9202
Raw
1import x.executor
2
3fn 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