5 个版本
0.2.2 | 2023年6月29日 |
---|---|
0.2.1 | 2021年12月16日 |
0.2.0 | 2021年10月22日 |
0.1.1 | 2021年10月19日 |
0.1.0 | 2021年10月19日 |
#550 在 数据结构
1,383 每月下载量
用于 7 个crate (3 直接)
15KB
270 行
debounce
用于防抖事件流的 数据结构和辅助工具:移除时间上紧密发生的重复事件。
lib.rs
:
用于防抖事件流的 数据结构和辅助工具:移除时间上紧密发生的重复事件。
此类事件的示例
- 来自文件系统监视器的文件写入操作
- 来自
tail -f
的类似日志字符串 - 来自传感器的硬件信号
防抖器接受原始的事件流,并在其中添加一个宽限期,在此期间相似的事件被视为重复。事件在最后一个重复事件超时后发送。
数据结构与防抖器
防抖逻辑本身在 [buffer] 模块中以被动数据结构的形式实现。缓冲区仅实现 .put
和 .get
,并且与特定的异步组织方式无关,无论是周期性轮询、线程、异步流还是其他某种魔法。
该crate还提供基于缓冲区的 线程化防抖器,这是您在大多数情况下想要使用的。
示例用法
use debounce::EventDebouncer;
use std::thread::sleep;
use std::time::Duration;
let delay = Duration::from_millis(10);
let debouncer = EventDebouncer::new(delay, move |data: String| {
println!("{}", data);
});
debouncer.put(String::from("foo"));
debouncer.put(String::from("foo"));
debouncer.put(String::from("bar"));
sleep(delay);
// prints one "foo" and one "bar" after the delay
在 examples/debounce.rs
中实现了一个工作命令行防抖器,可以直接使用
inotifywait -m -e close_write . | debounce -d 100