1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use std::time::{Duration, Instant}; /// Regulate minimum time intervals between some tasks. #[derive(Debug)] pub struct Pacemaker { min_interval: Duration, last_reset: Instant, } impl Pacemaker { /// Crate Pacemaker with minimum interval between ticks. pub fn new(min_interval: Duration) -> Pacemaker { Pacemaker { min_interval, last_reset: Instant::now(), } } /// Checks if minimum interval time has elapsed; returns true and resets if it did. pub fn tick(&mut self) -> bool { let now = Instant::now(); if now.duration_since(self.last_reset) > self.min_interval { self.last_reset = now; return true } false } }