Hack to ensure the CPU thread exits when the window is closed
This commit is contained in:
parent
537b774667
commit
d2d05f2d76
10
src/main.rs
10
src/main.rs
|
@ -147,6 +147,7 @@ fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
let (interrupt_sender, interrupt_receiver) = mpsc::channel::<Interrupt>();
|
let (interrupt_sender, interrupt_receiver) = mpsc::channel::<Interrupt>();
|
||||||
|
let (exit_sender, exit_receiver) = mpsc::channel::<bool>();
|
||||||
|
|
||||||
let builder = thread::Builder::new().name("cpu".to_string());
|
let builder = thread::Builder::new().name("cpu".to_string());
|
||||||
builder.spawn({
|
builder.spawn({
|
||||||
|
@ -157,6 +158,14 @@ fn main() {
|
||||||
cpu.interrupt(interrupt);
|
cpu.interrupt(interrupt);
|
||||||
}
|
}
|
||||||
cpu.execute_memory_instruction();
|
cpu.execute_memory_instruction();
|
||||||
|
if let Ok(_) = exit_receiver.try_recv() {
|
||||||
|
// the rest of the VM has exited, stop the CPU thread
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Ok(_) = exit_receiver.try_recv() {
|
||||||
|
// the rest of the VM has exited, stop the CPU thread
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if !cpu.flag.interrupt {
|
if !cpu.flag.interrupt {
|
||||||
// the cpu was halted and interrupts are disabled
|
// the cpu was halted and interrupts are disabled
|
||||||
|
@ -246,6 +255,7 @@ fn main() {
|
||||||
if input.update(&event) {
|
if input.update(&event) {
|
||||||
// close events
|
// close events
|
||||||
if input.quit() {
|
if input.quit() {
|
||||||
|
exit_sender.send(true).unwrap();
|
||||||
*control_flow = ControlFlow::Exit;
|
*control_flow = ControlFlow::Exit;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user