stop old update early if things have changed
authorBill Kuker <bkuker@billkuker.com>
Wed, 1 Jul 2009 18:45:22 +0000 (18:45 +0000)
committerBill Kuker <bkuker@billkuker.com>
Wed, 1 Jul 2009 18:45:22 +0000 (18:45 +0000)
src/com/billkuker/rocketry/motorsim/visual/Chart.java

index f033a7b7e2fed4b46ec157e7aaf67111534410dc..9b5ae212d82ca2e6a8da9cbb806bfb237d10df8f 100644 (file)
@@ -35,6 +35,7 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel  {
        \r
        private static ExecutorService fast = Executors.newFixedThreadPool(2) ;\r
        private static ExecutorService slow = Executors.newFixedThreadPool(2);\r
+       private boolean stop = false;\r
 \r
        public class IntervalDomain implements Iterable<Amount<X>>{\r
                \r
@@ -131,13 +132,16 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel  {
 \r
        public void setDomain(final Iterable<Amount<X>> d) {\r
                series.clear();\r
+               stop = true;\r
                fill(d, 100);\r
                fast.submit(new Thread(){\r
                        public void run(){\r
-                               fill(d, 10);\r
+                               if ( !stop )\r
+                                       fill(d, 10);\r
                                slow.submit(new Thread(){\r
                                        public void run(){\r
-                                               fill(d, 1);\r
+                                               if ( !stop )\r
+                                                       fill(d, 1);\r
                                        }\r
                                });\r
                        }\r
@@ -145,7 +149,8 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel  {
        }\r
        \r
        @SuppressWarnings("unchecked")\r
-       private void fill(Iterable<Amount<X>> d, int skip) {\r
+       private synchronized void fill(Iterable<Amount<X>> d, int skip) {\r
+               stop = false;\r
                int sz = 0;\r
                if (d instanceof Collection) {\r
                        sz = ((Collection) d).size();\r
@@ -159,6 +164,10 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel  {
                try {\r
                        Amount<X> last = null;\r
                        for (Amount<X> ax : d) {\r
+                               if ( stop ){\r
+                                       System.out.println("Stopping early " + skip);\r
+                                       return;\r
+                               }\r
                                last = ax;\r
                                if (cnt % skip == 0) {\r
                                        Amount<Y> y = (Amount<Y>) f.invoke(source, ax);\r