feat(tui): use thread builder

This commit is contained in:
AAAAAAAAAAAAAAAAAAAAAAAAAAAA 2026-01-18 21:21:14 +02:00
parent a933cbe285
commit d06e1c41f8

View file

@ -33,24 +33,25 @@ impl TuiOut {
engine: &Arc<RwLock<Tui>>, engine: &Arc<RwLock<Tui>>,
state: &Arc<RwLock<T>>, state: &Arc<RwLock<T>>,
timer: Duration timer: Duration
) -> JoinHandle<()> { ) -> Result<JoinHandle<()>, std::io::Error> {
let exited = engine.read().unwrap().exited.clone(); let exited = engine.read().unwrap().exited.clone();
let engine = engine.clone(); let engine = engine.clone();
let state = state.clone(); let state = state.clone();
let Size { width, height } = engine.read().unwrap().backend.size().expect("get size failed"); 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 }); let mut buffer = Buffer::empty(Rect { x: 0, y: 0, width, height });
spawn(move || loop { std::thread::Builder::new()
.name("tui output thread".into())
.spawn(move || loop {
if exited.fetch_and(true, Relaxed) { if exited.fetch_and(true, Relaxed) {
break break
} }
//let t0 = engine.read().unwrap().perf.get_t0(); let t0 = engine.read().unwrap().perf.get_t0();
let Size { width, height } = engine.read().unwrap().backend.size() let Size { width, height } = engine.read().unwrap().backend.size()
.expect("get size failed"); .expect("get size failed");
if let Ok(state) = state.try_read() { if let Ok(state) = state.try_read() {
let size = Rect { x: 0, y: 0, width, height }; let size = Rect { x: 0, y: 0, width, height };
if buffer.area != size { if buffer.area != size {
engine.write().unwrap().backend.clear_region(ClearType::All) engine.write().unwrap().backend.clear_region(ClearType::All).expect("clear failed");
.expect("clear failed");
buffer.resize(size); buffer.resize(size);
buffer.reset(); buffer.reset();
} }
@ -58,8 +59,8 @@ impl TuiOut {
state.draw(&mut output); state.draw(&mut output);
buffer = engine.write().unwrap().flip(output.buffer, size); buffer = engine.write().unwrap().flip(output.buffer, size);
} }
//let t1 = engine.read().unwrap().perf.get_t1(t0).unwrap(); 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()); buffer.set_string(0, 0, &format!("{:>3}.{:>3}ms", t1.as_millis(), t1.as_micros() % 1000), Style::default());
std::thread::sleep(timer); std::thread::sleep(timer);
}) })
} }