diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2022-11-10 01:08:06 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-10 01:08:06 -0500 |
commit | f5ec9191f270ffb4fc36e34836e931d3ef55a162 (patch) | |
tree | a51b3b58b957a14370efc32b0bc7f4251a563df3 /src | |
parent | 7e6e098e2b9775964e7c416626069d7c28d7fcc6 (diff) |
other: try using flume for channel (#884)
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/main.rs | 7 | ||||
-rw-r--r-- | src/lib.rs | 22 |
2 files changed, 13 insertions, 16 deletions
diff --git a/src/bin/main.rs b/src/bin/main.rs index e615c5db..feef550a 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -18,7 +18,7 @@ use std::{ panic, sync::{ atomic::{AtomicBool, Ordering}, - mpsc, Arc, Condvar, Mutex, + Arc, Condvar, Mutex, }, thread, time::Duration, @@ -78,7 +78,7 @@ fn main() -> Result<()> { let thread_termination_cvar = Arc::new(Condvar::new()); // Set up input handling - let (sender, receiver) = mpsc::channel(); + let (sender, receiver) = flume::unbounded(); let _input_thread = create_input_thread(sender.clone(), thread_termination_lock.clone()); // Cleaning loop @@ -107,7 +107,7 @@ fn main() -> Result<()> { }; // Event loop - let (collection_thread_ctrl_sender, collection_thread_ctrl_receiver) = mpsc::channel(); + let (collection_thread_ctrl_sender, collection_thread_ctrl_receiver) = flume::unbounded(); let _collection_thread = create_collection_thread( sender, collection_thread_ctrl_receiver, @@ -144,6 +144,7 @@ fn main() -> Result<()> { let mut first_run = true; while !is_terminated.load(Ordering::SeqCst) { + // TODO: Would be good to instead use a mix of is_terminated check + recv. Probably use a termination event instead. if let Ok(recv) = receiver.recv_timeout(Duration::from_millis(TICK_RATE_IN_MILLISECONDS)) { match recv { BottomEvent::KeyInput(event) => { @@ -19,9 +19,8 @@ use std::{ io::{stderr, stdout, Write}, panic::PanicInfo, path::PathBuf, - sync::Arc, - sync::Condvar, sync::Mutex, + sync::{Arc, Condvar}, thread::{self, JoinHandle}, time::{Duration, Instant}, }; @@ -36,6 +35,8 @@ use crossterm::{ terminal::{disable_raw_mode, LeaveAlternateScreen}, }; +use flume::{Receiver, Sender}; + use app::{ data_harvester, frozen_state::FrozenState, @@ -106,7 +107,7 @@ pub fn handle_mouse_event(event: MouseEvent, app: &mut App) { } pub fn handle_key_event_or_break( - event: KeyEvent, app: &mut App, reset_sender: &std::sync::mpsc::Sender<ThreadControlEvent>, + event: KeyEvent, app: &mut App, reset_sender: &Sender<ThreadControlEvent>, ) -> bool { // debug!("KeyEvent: {:?}", event); @@ -411,9 +412,7 @@ pub fn update_data(app: &mut App) { } pub fn create_input_thread( - sender: std::sync::mpsc::Sender< - BottomEvent<crossterm::event::KeyEvent, crossterm::event::MouseEvent>, - >, + sender: Sender<BottomEvent<crossterm::event::KeyEvent, crossterm::event::MouseEvent>>, termination_ctrl_lock: Arc<Mutex<bool>>, ) -> JoinHandle<()> { thread::spawn(move || { @@ -466,13 +465,10 @@ pub fn create_input_thread( } pub fn create_collection_thread( - sender: std::sync::mpsc::Sender< - BottomEvent<crossterm::event::KeyEvent, crossterm::event::MouseEvent>, - >, - control_receiver: std::sync::mpsc::Receiver<ThreadControlEvent>, - termination_ctrl_lock: Arc<Mutex<bool>>, termination_ctrl_cvar: Arc<Condvar>, - app_config_fields: &app::AppConfigFields, filters: app::DataFilters, - used_widget_set: UsedWidgets, + sender: Sender<BottomEvent<crossterm::event::KeyEvent, crossterm::event::MouseEvent>>, + control_receiver: Receiver<ThreadControlEvent>, termination_ctrl_lock: Arc<Mutex<bool>>, + termination_ctrl_cvar: Arc<Condvar>, app_config_fields: &app::AppConfigFields, + filters: app::DataFilters, used_widget_set: UsedWidgets, ) -> JoinHandle<()> { let temp_type = app_config_fields.temperature_type; let use_current_cpu_total = app_config_fields.use_current_cpu_total; |