#queue #ttl #fps-counter

ttl-queue

在给定时间后丢弃其内容的队列

2个不稳定版本

0.2.0 2023年8月2日
0.1.0 2023年8月2日

#1247数据结构

Download history 26/week @ 2024-04-12 7/week @ 2024-04-19 12/week @ 2024-04-26 6/week @ 2024-05-03 20/week @ 2024-05-10 4/week @ 2024-05-17 21/week @ 2024-05-24 16/week @ 2024-05-31 24/week @ 2024-06-07 15/week @ 2024-06-14 67/week @ 2024-06-21 85/week @ 2024-06-28 27/week @ 2024-07-05 1/week @ 2024-07-12 27/week @ 2024-07-19 70/week @ 2024-07-26

149 每月下载量

EUPL-1.2

17KB
334

定时队列

在给定时间后丢弃其内容的队列。

示例

要实现帧率计数器,可以使用以下技术

use std::thread;
use std::time::Duration;
use ttl_queue::TtlQueue;

fn main() {
    let mut fps_counter = TtlQueue::new(Duration::from_secs_f64(1.0));

    for i in 0..100 {
        // Register a new frame and return the number of frames observed
        // within the last second.
        let fps = fps_counter.refresh_and_push_back(());
        debug_assert!(fps >= 1);

        // Sleep 10 ms to achieve a ~100 Hz frequency.
        thread::sleep(Duration::from_millis(10));
    }

    let fps = fps_counter.refresh();
    debug_assert!(fps >= 95 && fps <= 105);
}

lib.rs:

定时队列

在给定时间后丢弃其内容的队列。

包功能

  • vecdeque - 使用 VecDeque 作为底层数据结构。默认启用。
  • doublestack - 使用两个栈 (Vec) 作为底层数据结构。与 vecdeque 互斥。
  • tokio - 使用 tokio::time::Instant 而不是 std::time::Instant

示例

要实现帧率计数器,可以使用以下技术

let mut fps_counter = TtlQueue::new(Duration::from_secs_f64(1.0));

for i in 0..=50 {
    // Register a new frame and return the number of frames observed
    // within the last second.
    let fps = fps_counter.refresh_and_push_back(());
    debug_assert!(fps >= 1);

    // Sleep ~20 ms to achieve a ~50 Hz frequency.
    thread::sleep(Duration::from_millis(19));
}

let fps = fps_counter.refresh();
debug_assert!(fps >= 45 && fps <= 55);

let delta = fps_counter.avg_delta();
debug_assert!(delta >= Duration::from_millis(19) && delta <= Duration::from_millis(21));

依赖关系

~0–1.1MB
~19K SLoC