summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2022-11-10 01:08:06 -0500
committerGitHub <noreply@github.com>2022-11-10 01:08:06 -0500
commitf5ec9191f270ffb4fc36e34836e931d3ef55a162 (patch)
treea51b3b58b957a14370efc32b0bc7f4251a563df3 /src
parent7e6e098e2b9775964e7c416626069d7c28d7fcc6 (diff)
other: try using flume for channel (#884)
Diffstat (limited to 'src')
-rw-r--r--src/bin/main.rs7
-rw-r--r--src/lib.rs22
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) => {
diff --git a/src/lib.rs b/src/lib.rs
index 844a1efe..0d7ce656 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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;