Setting simulation speed higher should no longer have an effect on logic
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / LogicExecuter.java
index 77a0935..c0cfeb1 100644 (file)
@@ -41,13 +41,12 @@ public class LogicExecuter
                        {
                                while (shouldBeRunningLive.get())
                                {
-                                       // always execute to keep timeline from "hanging behind" for too long
-                                       long current = tf.getAsLong();
+                                       long current = tf.getTime();
                                        timeline.executeUntil(timeline.laterThan(current), System.currentTimeMillis() + 10);
                                        long nextEventTime = timeline.nextEventTime();
                                        long sleepTime;
                                        if (timeline.hasNext())
-                                               sleepTime = tf.simulTimeDeltaToRealTimeMillis(nextEventTime - current);
+                                               sleepTime = (long) ((nextEventTime - current) * tf.getSimulTimeToRealTimeFactor());
                                        else
                                                sleepTime = 10000;
                                        try
@@ -82,6 +81,8 @@ public class LogicExecuter
                                if (Timeline.timeCmp(event.getTiming(), nextExecSimulTime.get()) < 0)
                                        simulationThread.interrupt();
                });
+               // not optimal; but we don't expect this to happen very often
+               tf.addSimulTimeToRealTimeFactorChangedListener(d -> simulationThread.interrupt());
        }
 
        public void executeNextStep()