лочится основной тред:
fn background_scheduler(app_state: AppStatePointer, rx: Receiver<()>) {
// create background periodical task
thread::spawn(move || {
let wait_time = Duration::from_millis(5000);
let mut i: i32 = 0;
let mut cloned_value = app_state.value.write().unwrap();
loop {
if let Ok(_) = rx.recv_timeout(wait_time) {
println!("terminate thread");
// sleep was interrupted
return;
}
// set new user value
*cloned_value = format!("{} cycle", i).to_string();
// for debug print
println!("{} working app state update thread", i);
i = i + 1;
}
});
}
...
#[rocket::main]
async fn main() {
// create channel for receive signal (CTRL+C) in threads
let (send, recv) = mpsc::channel();
// create global app state
let app_state = AppState::new("default value".to_string());
// run background thread
background_scheduler(app_state.clone(), recv);
// run in another thread?
let _ = rocket::build()
.mount("/", routes![index, update])
.manage(app_state)
.launch().await;
// terminate background thread
// send.send(());
}
запускаю, до http ручки не достучаться, просто виснет, в консоли видно что все время работает другой тред:
0 working app state update thread
1 working app state update thread
2 working app state update thread
...
а красивые принты от рокета в консоли есть?
Обсуждают сегодня