我在计时器方面遇到一些问题:我无法确定其无法正常工作的原因:
use std::sync::{Arc, Mutex};
use timer::Timer;
struct Counter {
value: i32,
}
impl Counter {
fn new() -> Self {
Self { value: 0 }
}
fn increment(&mut self) {
self.value += 1;
}
fn get_value(&self) -> i32 {
self.value
}
}
#[test]
fn test_1() {
let counter = Arc::new(Mutex::new(Counter::new()));
let counter_clone_1 = Arc::clone(&counter);
let counter_clone_2 = Arc::clone(&counter_clone_1);
// Arrange
let callback = {
move || {
println!("Callback executed");
counter_clone_1.lock().unwrap().increment();
}
};
let timer = Timer::new();
println!("Timer created");
timer.schedule_with_delay(chrono::Duration::seconds(2), callback);
// Assert initial value
println!("Initial assert");
assert_eq!(counter_clone_2.lock().unwrap().get_value(), 0);
// Act
println!("Sleeping for 4 seconds");
std::thread::sleep(std::time::Duration::new(4, 0));
// Assert incremented value
println!("Final assert");
assert_eq!(counter.lock().unwrap().get_value(), 1);
}
为什么在指定的超时时间后没有调用回调?
我尝试了多次超时(包括零)但没有成功,这是我看到的结果:
Timer created
Initial assert
Sleeping for 4 seconds
Final assert
thread 'missed_ping_timer_tests::test_1' panicked at tests\missed_ping_timer_tests.rs:51:5:
assertion `left == right` failed
left: 0
right: 1
这就是我的
Cargo.toml
文件中的内容:
[dependencies]
timer = "0.2.0"
chrono = "0.4.39"
如果您阅读schedule_with_delay
此方法返回一个
对象。如果Guard
被删除,执行将被取消。Guard
由于您没有将保护对象分配给任何变量,因此它会立即被删除并取消执行。