src/Comms.jl

changeset 5
015025cf2a50
child 6
a5c1eb932d19
equal deleted inserted replaced
4:59fd17a3cea0 5:015025cf2a50
1 #########################################
2 # Helpers for communication via channels
3 #########################################
4
5 module Comms
6
7 __precompile__()
8
9 ##############
10 # Our exports
11 ##############
12
13 export process_channel,
14 put_onlylatest!
15
16 ####################
17 # Channel iteration
18 ####################
19
20 function process_channel(fn, rc)
21 while true
22 d=take!(rc)
23 # Take only the latest image to visualise
24 while isready(rc)
25 d=take!(rc)
26 end
27 # We're done if we were fed nothing
28 if isnothing(d)
29 break
30 end
31 try
32 fn(d)
33 catch ex
34 error("Exception in process_channel handler. Terminating.\n$(ex)")
35 throw(ex)
36 end
37 end
38 end
39
40 #############################################
41 # Ensure only latest data is in a Channel(1)
42 #############################################
43
44 function put_onlylatest!(rc, d)
45 while isready(rc)
46 take!(rc)
47 end
48 put!(rc, d)
49 end
50
51 end # Module

mercurial