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
- // timeline.executeUntil(timeline.laterThan(System.currentTimeMillis()), System.currentTimeMillis() + 10);
- // model.timeline.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10);
- // long sleepTime;
- // if (model.timeline.hasNext())
- // sleepTime = model.timeline.nextEventTime() - System.currentTimeMillis();
- // else
- // sleepTime = 10;
- // try
- // {
- // if (sleepTime > 0)
- // Thread.sleep(sleepTime);
- // }
- // catch (InterruptedException e)
- // {
- // } // it is normal execution flow to be interrupted
- // }
- // });
- // simulationThread.start();
- // model.timeline.addEventAddedListener(event ->
- // {
- // if (event.getTiming() <= System.currentTimeMillis())
- // simulationThread.interrupt();
- // });
+ Thread simulationThread = new Thread(() ->
+ {
+ while (running.get())
+ {
+ // always execute to keep timeline from "hanging behind" for too long
- timeline.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10);
++ timeline.executeUntil(timeline.laterThan(System.currentTimeMillis()), System.currentTimeMillis() + 10);
+ long sleepTime;
+ if (timeline.hasNext())
+ sleepTime = timeline.nextEventTime() - System.currentTimeMillis();
+ else
+ sleepTime = 10;
+ try
+ {
+ if (sleepTime > 0)
+ Thread.sleep(sleepTime);
+ }
+ catch (InterruptedException e)
+ {
+ } // it is normal execution flow to be interrupted
+ }
+ });
+ simulationThread.start();
+ timeline.addEventAddedListener(event ->
+ {
+ if (event.getTiming() <= System.currentTimeMillis())
+ simulationThread.interrupt();
+ });
shell.open();
while (!shell.isDisposed())