Wed, 11 Dec 2019 18:45:34 +0200
Add Channel comms helper module
src/AlgTools.jl | file | annotate | diff | comparison | revisions | |
src/Comms.jl | file | annotate | diff | comparison | revisions |
--- a/src/AlgTools.jl Tue Nov 19 10:23:58 2019 -0500 +++ b/src/AlgTools.jl Wed Dec 11 18:45:34 2019 +0200 @@ -7,5 +7,6 @@ include("LinkedLists.jl") include("Iterate.jl") include("Util.jl") +include("Comms.jl") end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Comms.jl Wed Dec 11 18:45:34 2019 +0200 @@ -0,0 +1,51 @@ +######################################### +# Helpers for communication via channels +######################################### + +module Comms + +__precompile__() + +############## +# Our exports +############## + +export process_channel, + put_onlylatest! + +#################### +# Channel iteration +#################### + +function process_channel(fn, rc) + while true + d=take!(rc) + # Take only the latest image to visualise + while isready(rc) + d=take!(rc) + end + # We're done if we were fed nothing + if isnothing(d) + break + end + try + fn(d) + catch ex + error("Exception in process_channel handler. Terminating.\n$(ex)") + throw(ex) + end + end +end + +############################################# +# Ensure only latest data is in a Channel(1) +############################################# + +function put_onlylatest!(rc, d) + while isready(rc) + take!(rc) + end + put!(rc, d) +end + +end # Module