#timer #cancel #delay #timeout

thread_timer

一个简单、可取消的定时器,无外部依赖

3 个版本 (破坏性更新)

0.3.0 2020年10月7日
0.2.0 2020年8月2日
0.1.0 2020年8月2日

#618 in 并发


suiron-rust 中使用

MIT 许可证

13KB
104

thread_timer

这是一个简单、可取消的定时器实现,无外部依赖。

License

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));

无运行时依赖