我正在使用一个称为“ 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));
}
的文档Timer
并Guard
提到,如果删除Timer
或Guard
,则最终取消计划的执行。
因此,在这种情况下,无论是同时插入timer
和guard
进入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));
}
可替换地(和可能更好),传递的参考Timer
到insert_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] 删除。
我来说两句