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