diff options
author | rabite <rabite@posteo.de> | 2020-05-23 13:57:17 +0200 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2020-05-23 13:57:17 +0200 |
commit | 446b6731e2cd0504ae8f481ab19365dba69df86d (patch) | |
tree | 096dbeb55ceee7e5b1354fe8f44851d2dd0a2e7c /src/files.rs | |
parent | 3f66d7f7dad8e9c057e587113446eea3bd0f31e3 (diff) |
reduce flicker due to ticker
Diffstat (limited to 'src/files.rs')
-rw-r--r-- | src/files.rs | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/files.rs b/src/files.rs index de00a28..f78f067 100644 --- a/src/files.rs +++ b/src/files.rs @@ -60,7 +60,7 @@ pub fn start_ticking(sender: Sender<Events>) { use std::time::Duration; IOTICK_CLIENTS.fetch_add(1, Ordering::Relaxed); - if IOTICK_CLIENTS.load(Ordering::Acquire) == 1 { + if IOTICK_CLIENTS.load(Ordering::Relaxed) == 1 { std::thread::spawn(move || { IOTICK.store(0, Ordering::Relaxed); @@ -76,7 +76,7 @@ pub fn start_ticking(sender: Sender<Events>) { .unwrap(); // All jobs done? - if IOTICK_CLIENTS.load(Ordering::Acquire) == 0 { + if IOTICK_CLIENTS.load(Ordering::Relaxed) == 0 { IOTICK.store(0, Ordering::Relaxed); return; } @@ -1647,3 +1647,32 @@ impl File { self.path.short_string() } } + + + +// Small wrapper that simplifies stopping with more complex control flow +pub struct Ticker { + invalidated: bool +} + +impl Ticker { + pub fn start_ticking(sender: Sender<Events>) -> Self { + start_ticking(sender); + Ticker { + invalidated: false + } + } + + pub fn stop_ticking(&mut self) { + stop_ticking(); + self.invalidated = true; + } +} + +impl Drop for Ticker { + fn drop(&mut self) { + if !self.invalidated { + self.stop_ticking(); + } + } +} |