diff --git a/src/util.rs b/src/util.rs index 6fbf1b9..894a9d5 100644 --- a/src/util.rs +++ b/src/util.rs @@ -7,7 +7,8 @@ use crossterm::{ use tui::{backend::CrosstermBackend, Terminal}; use std::io::{self, Write}; -use std::sync::{Arc, Mutex}; +use std::sync::{Arc}; +use std::sync::atomic::{AtomicBool, Ordering}; use std::{sync::mpsc, thread, time::Duration}; #[derive(Debug, Clone, Copy)] @@ -61,8 +62,8 @@ pub fn destruct_terminal() { pub struct Events { pub rx: mpsc::Receiver>, pub tx: mpsc::Sender>, - pub pause_stdin: Arc>, - pub pause_ticker: Arc>, + pub pause_stdin: Arc, + pub pause_ticker: Arc, } impl Events { @@ -70,14 +71,14 @@ impl Events { pub fn with_config(config: EventConfig) -> Events { use crossterm::event::{KeyCode::*, KeyModifiers}; let (tx, rx) = mpsc::channel(); - let pause_stdin = Arc::new(Mutex::new(false)); - let pause_ticker = Arc::new(Mutex::new(false)); + let pause_stdin = Arc::new(AtomicBool::new(false)); + let pause_ticker = Arc::new(AtomicBool::new(false)); let _input_handle = { let tx = tx.clone(); let pause_stdin = pause_stdin.clone(); thread::spawn(move || { loop { - if *pause_stdin.lock().unwrap() { + if pause_stdin.load(Ordering::Relaxed) { thread::sleep(Duration::from_millis(250)); continue; } @@ -119,7 +120,7 @@ impl Events { thread::spawn(move || loop { // print!("\r\n"); // dbg!(*pause_ticker.lock().unwrap()); - while *pause_ticker.lock().unwrap() { + while pause_ticker.load(Ordering::Relaxed) { thread::sleep(Duration::from_millis(250)); } if tx.send(Event::Tick).is_err() { @@ -144,21 +145,19 @@ impl Events { } pub fn pause_ticker(&self) { - *self.pause_ticker.lock().unwrap() = true; - // print!("\r\n"); - // dbg!(*self.pause_ticker.lock().unwrap()); + self.pause_ticker.swap(true, Ordering::Relaxed); } pub fn resume_ticker(&self) { - *self.pause_ticker.lock().unwrap() = false; + self.pause_ticker.swap(false, Ordering::Relaxed); } pub fn pause_event_loop(&self) { - *self.pause_stdin.lock().unwrap() = true; + self.pause_stdin.swap(true, Ordering::Relaxed); } pub fn resume_event_loop(&self) { - *self.pause_stdin.lock().unwrap() = false; + self.pause_stdin.swap(false, Ordering::Relaxed); } pub fn pause_key_capture(&self, terminal: &mut Terminal>) {