From 02e5a783cfc2fc148d97cecb93be031cb4222917 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Thu, 16 May 2019 00:54:24 +0200 Subject: [PATCH] LogicUI actually runs the simulation --- LogicUI/src/era/mi/examples/gui/LogicUI.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/LogicUI/src/era/mi/examples/gui/LogicUI.java b/LogicUI/src/era/mi/examples/gui/LogicUI.java index f58ececb..4456a9a2 100644 --- a/LogicUI/src/era/mi/examples/gui/LogicUI.java +++ b/LogicUI/src/era/mi/examples/gui/LogicUI.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; @@ -130,10 +131,40 @@ public class LogicUI public void run() { + AtomicBoolean running = new AtomicBoolean(true); + Thread simulationThread = new Thread(() -> + { + while(running.get()) + { + //always execute to keep timeline from "hanging behind" for too long + Simulation.TIMELINE.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10); + long sleepTime; + if(Simulation.TIMELINE.hasNext()) + { + sleepTime = Simulation.TIMELINE.nextEventTime() - System.currentTimeMillis(); + } else + sleepTime = 100; + try + { + if(sleepTime > 0) + Thread.sleep(sleepTime); + } catch(InterruptedException e) + {} //it is normal execution flow to be interrupted + } + }); + simulationThread.start(); + Simulation.TIMELINE.addEventAddedListener(event -> + { + if(event.getTiming() >= System.currentTimeMillis() / (double) 1) + simulationThread.interrupt(); + }); + shell.open(); while(!shell.isDisposed()) if(!display.readAndDispatch()) display.sleep(); + running.set(false); + simulationThread.interrupt(); } public static void main(String[] args) -- 2.17.1