Rust轻量级定时器库naive-timer的使用,高性能任务调度与时间管理工具
naive-timer
一个用于嵌入式平台的极简朴素定时器(no_std + alloc)。
示例
let mut timer = naive_timer::Timer::default();
let event = Arc::new(AtomicBool::new(false));
// 添加一个带回调的定时器
timer.add(Duration::from_secs(1), {
let event = event.clone();
move |_now| event.store(true, Ordering::SeqCst)
});
// 使定时器过期(通常来自定时器中断)
timer.expire(Duration::from_millis(1000));
assert_eq!(event.load(Ordering::SeqCst), true);
assert_eq!(timer.next(), None);
完整示例代码
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::time::Duration;
use naive_timer::Timer;
fn main() {
// 创建定时器实例
let mut timer = Timer::default();
// 创建一个原子布尔事件用于回调
let event = Arc::new(AtomicBool::new(false));
// 添加定时器:1秒后触发回调
timer.add(Duration::from_secs(1), {
let event = event.clone();
move |_now| {
// 回调函数:设置事件为true
event.store(true, Ordering::SeqCst);
println!("定时器触发!");
}
});
// 模拟时间流逝:经过1000毫秒(1秒)
timer.expire(Duration::from_millis(1000));
// 验证事件已被触发
assert_eq!(event.load(Ordering::SeqCst), true);
// 验证定时器队列已清空
assert_eq!(timer.next(), None);
println!("定时器测试成功!");
}
许可证
本仓库中的代码根据MIT许可证授权。
1 回复
Rust轻量级定时器库naive-timer使用指南
概述
naive-timer是一个轻量级、高性能的Rust定时器库,专注于任务调度和时间管理。它提供了简洁的API和高效的时间轮算法实现,适合需要精确时间控制的应用程序。
安装方法
在Cargo.toml中添加依赖:
[dependencies]
naive-timer = "0.3"
基本用法
1. 创建定时器实例
use naive_timer::Timer;
let timer = Timer::new();
2. 添加一次性定时任务
use std::time::Duration;
// 5秒后执行的任务
let task_id = timer.add_task(
Duration::from_secs(5),
Box::new(|| {
println!("任务执行了!");
})
);
3. 添加周期性任务
// 每2秒执行一次的任务
let periodic_id = timer.add_periodic_task(
Duration::from_secs(2),
Box::new(|| {
println!("周期性任务执行");
})
);
4. 取消任务
timer.cancel_task(task_id);
5. 高级示例:带参数的任务
use std::sync::Arc;
let shared_data = Arc::new("共享数据".to_string());
let callback_id = timer.add_task(
Duration::from_secs(3),
Box::new(move || {
let data = shared_data.clone();
println!("接收到数据: {}", data);
})
);
性能特性
- 基于时间轮算法,O(1)时间复杂度
- 低内存占用
- 高精度定时(毫秒级)
- 线程安全设计
完整示例
use naive_timer::Timer;
use std::time::Duration;
use std::thread;
fn main() {
let timer = Timer::new();
// 添加多个定时任务
timer.add_task(
Duration::from_secs(1),
Box::new(|| println!("1秒后执行"))
);
timer.add_task(
Duration::from_secs(3),
Box::new(|| println!("3秒后执行"))
);
// 保持主线程运行
thread::sleep(Duration::from_secs(5));
}
注意事项
- 定时器需要在单独的线程中运行或集成到事件循环中
- 任务执行是同步的,长时间任务可能影响定时精度
- 适合I/O密集型任务,计算密集型任务建议使用线程池
这个库为Rust开发者提供了简单而强大的定时任务管理能力,特别适合网络编程、游戏开发和实时系统等场景。
完整示例demo
use naive_timer::Timer;
use std::time::Duration;
use std::thread;
use std::sync::Arc;
fn main() {
// 创建定时器实例
let timer = Timer::new();
// 一次性任务示例:3秒后执行
let one_time_id = timer.add_task(
Duration::from_secs(3),
Box::new(|| {
println!("一次性任务:3秒时间到!");
})
);
// 周期性任务示例:每2秒执行一次
let periodic_id = timer.add_periodic_task(
Duration::from_secs(2),
Box::new(|| {
println!("周期性任务:每2秒执行一次");
})
);
// 带参数的共享数据任务
let shared_counter = Arc::new(0);
let counter_clone = shared_counter.clone();
let param_task_id = timer.add_task(
Duration::from_secs(5),
Box::new(move || {
println!("带参数任务执行,计数器值: {}", *counter_clone);
})
);
// 演示取消任务(这里取消一次性任务)
// timer.cancel_task(one_time_id);
println!("定时任务已设置,等待执行...");
// 保持主线程运行足够长时间以观察所有任务执行
thread::sleep(Duration::from_secs(10));
// 取消周期性任务
timer.cancel_task(periodic_id);
println!("程序结束");
}