You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中实现按下F1后启动1到50000毫秒的计时任务

实现方案

第一步:补全Cargo.toml依赖

你当前的依赖少了代码里用到的anyhow和smol,补充后如下:

[dependencies]
hookmap = "0.4.7"
delay_timer = "0.10.1"
anyhow = "1.0"
smol = "1.3"

第二步:完整实现代码

use hookmap::*;
use delay_timer::prelude::*;
use anyhow::Result;
use std::time::Duration;

fn main() -> Result<()> {
    // 初始化全局定时任务调度器
    let delay_timer = DelayTimerBuilder::default().build();
    let hotkey = Hotkey::new();

    hotkey!(hotkey => {
        // 监听F1按下事件
        on_press(F1) {
            println!("F1按下,开始计时");
            // 插入2000ms后执行的任务1
            let task1 = TaskBuilder::default()
                .set_frequency_once_by_duration(Duration::from_millis(2000))
                .spawn_async_routine(|| async move {
                    // 这里写你的操作1逻辑
                    println!("触发操作1:当前计时2000ms");
                })?;
            delay_timer.add_task(task1)?;

            // 插入39999ms后执行的任务2
            let task2 = TaskBuilder::default()
                .set_frequency_once_by_duration(Duration::from_millis(39999))
                .spawn_async_routine(|| async move {
                    // 这里写你的操作2逻辑
                    println!("触发操作2:当前计时39999ms");
                })?;
            delay_timer.add_task(task2)?;

            // 插入50000ms计时结束的收尾任务
            let stop_task = TaskBuilder::default()
                .set_frequency_once_by_duration(Duration::from_millis(50000))
                .spawn_async_routine(|| async move {
                    println!("计时结束,累计50000ms");
                })?;
            delay_timer.add_task(stop_task)?;
        }
    });

    // 启动热键监听
    hotkey.handle_input();
    // 程序退出前停止调度器释放资源
    delay_timer.stop_delay_timer()?;
    Ok(())
}

核心逻辑说明

  • 不需要手动逐毫秒计数,直接给每个需要触发操作的时间点注册一次性定时任务即可,完全没有空转的性能损耗
  • 用set_frequency_once_by_duration可以精准指定任意毫秒数的触发时间,适配你各种自定义时间点的需求
  • 定时任务是异步执行的,不会阻塞热键的正常监听,按下F1后你还可以继续响应其他热键操作

内容的提问来源于stack exchange,提问作者zwl1619

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:06:04