3 个版本 (破坏性更新)
0.3.0 | 2020年10月7日 |
---|---|
0.2.0 | 2020年8月2日 |
0.1.0 | 2020年8月2日 |
#618 in 并发
在 suiron-rust 中使用
13KB
104 行
thread_timer
这是一个简单、可取消的定时器实现,无外部依赖。
ThreadTimer
此crate的主要接口是结构体 ThreadTimer
,它是一个简单、可取消的定时器,可以在等待任意时长后运行一个闭包。
等待是通过使用一个辅助线程(“等待线程”)来实现的,该线程监听等待请求,然后在请求的持续时间后执行所需的闭包。因为每个 ThreadTimer
只保持一个等待线程,所以每个 ThreadTimer
在同一时间只能等待一个闭包。
use std::sync::mpsc::{self, TryRecvError};
use std::thread;
use std::time::Duration;
use thread_timer::ThreadTimer;
let (sender, receiver) = mpsc::channel::<bool>();
let timer = ThreadTimer::new();
timer.start(Duration::from_millis(50), move || { sender.send(true).unwrap() }).unwrap();
thread::sleep(Duration::from_millis(60));
assert_eq!(receiver.try_recv(), Ok(true));
如果 ThreadTimer 当前正在等待执行一个闭包,则可以取消等待,在这种情况下,闭包将不会运行。
use std::sync::mpsc::{self, TryRecvError};
use std::thread;
use std::time::Duration;
use thread_timer::ThreadTimer;
let (sender, receiver) = mpsc::channel::<bool>();
let timer = ThreadTimer::new();
timer.start(Duration::from_millis(50), move || { sender.send(true).unwrap() }).unwrap();
thread::sleep(Duration::from_millis(10));
timer.cancel().unwrap();
thread::sleep(Duration::from_millis(60));
assert_eq!(receiver.try_recv(), Err(TryRecvError::Disconnected));