X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.simulator.toolkit%2Fsrc%2Forg%2Fsimantics%2Fsimulator%2Ftoolkit%2FDynamicExperimentThread.java;h=bff9fe751b666455b8c9655ad3b59e93fe807c98;hb=dac7a40d1cf85956aeac63ccbdf5b7a0d9977ac3;hp=0967bfdbc28d19c3e5b69eae0980128fa296ad92;hpb=1b6efbcb17b7cf648145f83b1a82f6e1c1dce22e;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/DynamicExperimentThread.java b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/DynamicExperimentThread.java index 0967bfdbc..bff9fe751 100644 --- a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/DynamicExperimentThread.java +++ b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/DynamicExperimentThread.java @@ -138,10 +138,12 @@ abstract public class DynamicExperimentThread extends Thread { if(deltaNs > 0) { synchronized(tasks) { - try { - tasks.wait(deltaMs, deltaNsRem); - } catch (InterruptedException e) { - e.printStackTrace(); + if (inState(StandardExperimentStates.Running.class)) { + try { + tasks.wait(deltaMs, deltaNsRem); + } catch (InterruptedException e) { + LOGGER.warn("Dynamic experiment thread '" + this.getName() + "' (" + this.getClass().getName() + ") interrupted", e); + } } } } @@ -158,7 +160,7 @@ abstract public class DynamicExperimentThread extends Thread { try { tasks.wait(Integer.MAX_VALUE); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.warn("Dynamic experiment thread '" + this.getName() + "' (" + this.getClass().getName() + ") interrupted", e); } } } @@ -188,7 +190,7 @@ abstract public class DynamicExperimentThread extends Thread { }; public int runTasks() { - ArrayList todo = new ArrayList<>(); + ArrayList todo = new ArrayList<>(tasks.size()); synchronized(tasks) { todo.addAll(tasks); tasks.clear(); @@ -271,6 +273,9 @@ abstract public class DynamicExperimentThread extends Thread { public void changeState(ExperimentState state) { this.state = state; fireStateChanged(state); + synchronized (tasks) { + tasks.notifyAll(); + } } public void addListener(DynamicExperimentThreadListener listener) {