mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2026-01-31 10:56:41 +01:00
feat(tui): use thread builder
This commit is contained in:
parent
a933cbe285
commit
d06e1c41f8
1 changed files with 24 additions and 23 deletions
|
|
@ -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);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue