From 995cfdf391ee3e5b156ce19d80670a70595f4a58 Mon Sep 17 00:00:00 2001 From: Robert Garrett Date: Sun, 25 Jun 2023 09:11:12 -0500 Subject: [PATCH] feat: Dispatcher constructor separates render_rx The dispatcher no longer owns the render results message channel, and instead passes it out as a separate item during construction. --- src/main.rs | 3 +-- src/thread_utils.rs | 18 +++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index b6ee302..ed7b266 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,8 +66,7 @@ fn main() { }; thread::scope(|s| { - let mut dispatcher = thread_utils::Dispatcher::new(&small_rng); - let scanline_receiver = dispatcher.render_rx; + let (mut dispatcher, mut scanline_receiver) = thread_utils::Dispatcher::new(&small_rng); s.spawn(move || { for y in (0..image.1).rev() { diff --git a/src/thread_utils.rs b/src/thread_utils.rs index e5e87ad..d599620 100644 --- a/src/thread_utils.rs +++ b/src/thread_utils.rs @@ -30,11 +30,10 @@ pub struct Dispatcher{ handles: Vec>, command_transmitters: Vec>, next_to_feed: usize, // gonna do a round-robin style dispatch, ig. - pub render_rx: mpsc::Receiver, } impl Dispatcher { - pub fn new(srng: &SmallRng) -> Dispatcher { + pub fn new(srng: &SmallRng) -> (Dispatcher, mpsc::Receiver ) { let mut handles = Vec::new(); let mut command_transmitters = Vec::>::new(); @@ -67,13 +66,14 @@ impl Dispatcher { command_transmitters.push(command_tx); } // finally, stash everything in the Dispatcher struct and return. - - Dispatcher{ - handles, - command_transmitters, - next_to_feed: 0, - render_rx, - } + ( + Dispatcher{ + handles, + command_transmitters, + next_to_feed: 0, + }, + render_rx + ) } //TODO: Reconsider round-robin dispatch