#events #stream #duplicate #structures #debouncing #helper #removing

debounce

用于防抖事件流的 数据结构和辅助工具:移除时间上紧密发生的重复事件

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数据结构

Download history 293/week @ 2024-03-14 285/week @ 2024-03-21 148/week @ 2024-03-28 208/week @ 2024-04-04 258/week @ 2024-04-11 212/week @ 2024-04-18 307/week @ 2024-04-25 295/week @ 2024-05-02 341/week @ 2024-05-09 290/week @ 2024-05-16 361/week @ 2024-05-23 318/week @ 2024-05-30 333/week @ 2024-06-06 353/week @ 2024-06-13 343/week @ 2024-06-20 310/week @ 2024-06-27

1,383 每月下载量
用于 7 个crate (3 直接)

BSD-3-Clause

15KB
270

debounce

用于防抖事件流的 数据结构和辅助工具:移除时间上紧密发生的重复事件。

https://docs.rs/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

无运行时依赖