v / examples / pendulum-simulation / animation.v
33 lines · 31 sloc · 834 bytes · 319eb83525cbfaf18a8518fbe06279c1b6751f1f
Raw
1module main
2
3import log
4import benchmark
5import sim
6import sim.anim
7import sim.args as simargs
8
9fn main() {
10 unbuffer_stdout()
11 log.use_stdout()
12 args := simargs.parse_args(extra_workers: 1)! as simargs.ParallelArgs
13 mut app := anim.new_app(args)
14 mut workers := []thread{cap: args.workers}
15 mut bmark := benchmark.start()
16 defer {
17 app.request_chan.close()
18 log.info('Waiting for workers to finish')
19 workers.wait()
20 app.result_chan.close()
21 log.info('Workers finished!')
22 bmark.measure(@FN)
23 log.info('Done!')
24 }
25 for id in 0 .. args.workers {
26 workers << spawn sim.sim_worker(id, app.request_chan, [app.result_chan])
27 }
28 handle_request := fn [app] (request &sim.SimRequest) ! {
29 app.request_chan <- request
30 }
31 spawn app.gg.run()
32 sim.run(args.params, grid: args.grid, on_request: sim.SimRequestHandler(handle_request))
33}
34