From d06e1c41f83ca3ede4937c13536d1c1edfd86b37 Mon Sep 17 00:00:00 2001 From: AAAAAAAAAAAAAAAAAAAAAAAAAAAA Date: Sun, 18 Jan 2026 21:21:14 +0200 Subject: [PATCH] feat(tui): use thread builder --- tui/src/tui_engine/tui_output.rs | 47 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/tui/src/tui_engine/tui_output.rs b/tui/src/tui_engine/tui_output.rs index f764092..de32046 100644 --- a/tui/src/tui_engine/tui_output.rs +++ b/tui/src/tui_engine/tui_output.rs @@ -33,35 +33,36 @@ impl TuiOut { engine: &Arc>, state: &Arc>, timer: Duration - ) -> JoinHandle<()> { + ) -> Result, std::io::Error> { let exited = engine.read().unwrap().exited.clone(); let engine = engine.clone(); let state = state.clone(); let Size { width, height } = engine.read().unwrap().backend.size().expect("get size failed"); let mut buffer = Buffer::empty(Rect { x: 0, y: 0, width, height }); - spawn(move || loop { - if exited.fetch_and(true, Relaxed) { - break - } - //let t0 = engine.read().unwrap().perf.get_t0(); - let Size { width, height } = engine.read().unwrap().backend.size() - .expect("get size failed"); - if let Ok(state) = state.try_read() { - let size = Rect { x: 0, y: 0, width, height }; - if buffer.area != size { - engine.write().unwrap().backend.clear_region(ClearType::All) - .expect("clear failed"); - buffer.resize(size); - buffer.reset(); + std::thread::Builder::new() + .name("tui output thread".into()) + .spawn(move || loop { + if exited.fetch_and(true, Relaxed) { + break } - let mut output = TuiOut { buffer, area: [0, 0, width, height] }; - state.draw(&mut output); - buffer = engine.write().unwrap().flip(output.buffer, size); - } - //let t1 = engine.read().unwrap().perf.get_t1(t0).unwrap(); - //buffer.set_string(0, 0, &format!("{:>3}.{:>3}ms", t1.as_millis(), t1.as_micros() % 1000), Style::default()); - std::thread::sleep(timer); - }) + let t0 = engine.read().unwrap().perf.get_t0(); + let Size { width, height } = engine.read().unwrap().backend.size() + .expect("get size failed"); + if let Ok(state) = state.try_read() { + let size = Rect { x: 0, y: 0, width, height }; + if buffer.area != size { + engine.write().unwrap().backend.clear_region(ClearType::All).expect("clear failed"); + buffer.resize(size); + buffer.reset(); + } + let mut output = TuiOut { buffer, area: [0, 0, width, height] }; + state.draw(&mut output); + buffer = engine.write().unwrap().flip(output.buffer, size); + } + let t1 = engine.read().unwrap().perf.get_t1(t0).unwrap(); + buffer.set_string(0, 0, &format!("{:>3}.{:>3}ms", t1.as_millis(), t1.as_micros() % 1000), Style::default()); + std::thread::sleep(timer); + }) } #[inline] pub fn with_rect (&mut self, area: [u16;4]) -> &mut Self {