为什么不能通过函数安排计时器?

dydokamil

我正在使用一个称为“ crate”的板条箱,timer并且试图将计时器“ guard”放入哈希图中以存储它,以便可以在结束之前将其删除或确保不创建重复项。

问题在于计时器在通过函数插入到哈希表中时不会触发,但是如果将函数的主体移到该定时器上,计时器就可以正常工作main

extern crate chrono;
extern crate timer;

use std::collections::HashMap;
use std::thread;
use std::time::Duration;

fn insert_to_guard_map(guard_map: &mut HashMap<i32, timer::Guard>) {
    let timer = timer::Timer::new();
    let guard = timer.schedule_with_delay(chrono::Duration::seconds(2), || {
        println!("Called after 2s.");
    });

    guard_map.insert(42, guard);
}

fn main() {
    let mut guard_map = HashMap::new();

    insert_to_guard_map(&mut guard_map);
    thread::sleep(Duration::from_secs(4));
}
瓦伦丁

的文档TimerGuard提到,如果删除TimerGuard,则最终取消计划的执行。

因此,在这种情况下,无论是同时插入timerguard进入HashMap

use timer::{Guard, Timer};

fn insert_to_guard_map(guard_map: &mut HashMap<i32, (Timer, Guard)>) {
    let timer = Timer::new();
    let guard = timer.schedule_with_delay(chrono::Duration::seconds(2), || {
        println!("Called after 2s.");
    });

    guard_map.insert(42, (timer, guard));
}

可替换地(和可能更好),传递的参考Timerinsert_to_guard_map()

use timer::{Guard, Timer};

fn insert_to_guard_map(guard_map: &mut HashMap<i32, Guard>, timer: &Timer) {
    let guard = timer.schedule_with_delay(chrono::Duration::seconds(2), || {
        println!("Called after 2s.");
    });

    guard_map.insert(42, guard);
}

fn main() {
    let timer = Timer::new();
    let mut guard_map = HashMap::new();

    insert_to_guard_map(&mut guard_map, &timer);
    thread::sleep(Duration::from_secs(4));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此函数(char *)不能通过ref传递?

为什么我不能停止计时器

取消后无法重新创建和安排计时器增益。为什么?

为什么不能通过这样的参数?

计时器安排任务

从Azure门户安排计时器触发的Azure函数

为什么计时器输出未知?

计时器为什么不启动?

为什么我不能通过PHP在准备好的查询中调用MySQL存储函数?

为什么引发异常的函数不能通过function_name.should.throw(error)传递?

为什么不能通过参数切换函数生成器的行为?

为什么我不能通过this.refs.xx调用函数

在AngularJS中,为什么不能通过简单函数访问$ scope变量?

为什么不能通过onclick属性调用名为clear的函数?

为什么我们不能通过引用inout函数快速传递const值?

为什么我不能通过 JS 函数更改我的内部 HTML?

为什么子类的默认构造函数不能通过反射获得?

为什么我不能通过友元函数访问类的私有值?

为什么计时器不能正确处理全局变量?

为什么不能在dispatch_async串行队列中停止计时器?

为什么我不能通过隧道连接到OpenVPN服务器的LAN接口?

为什么不能通过对象中定义的字符串调用设置器?

为什么编译器不能通过内联优化闭包变量?

为什么 Serilog PostgreSQL 接收器不能通过配置工作?

为什么不能通过传递临时输入迭代器来构造向量?

为什么我们不能通过编程语言使用幅度比较器?

为什么我不能通过实际的公共IP连接到服务器?

为什么我不能通过swift从服务器下载json fie?

为什么我不能通过 javascript 创建标签