X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FScheduler.java;fp=src%2Forg%2Fxwt%2FScheduler.java;h=79fba3c04539707819c3dec767882ebe5570bf88;hb=67eeff476179a91ae930ea89cbecde22132ca532;hp=a46c75c8722b0d3925d1696b2b6f936ce3081706;hpb=9d07963a45f2147a62d8897e9c4245c224d98ccb;p=org.ibex.core.git diff --git a/src/org/xwt/Scheduler.java b/src/org/xwt/Scheduler.java index a46c75c..79fba3c 100644 --- a/src/org/xwt/Scheduler.java +++ b/src/org/xwt/Scheduler.java @@ -10,34 +10,35 @@ public class Scheduler { // Public API Exposed to org.xwt ///////////////////////////////////////////////// + private static Scheduler singleton; public static abstract class Task { public abstract void perform(); } public static void add(Task t) { singleton.runnable.append(t); } - public static void init() { singleton.run(); } + public static void init() { + if (singleton != null) return; + singleton = Platform.getScheduler(); + singleton.run(); + } // API which must be supported by subclasses ///////////////////////////////////// - protected Scheduler() { } - /** - * INVARIANT: all scheduler implementations MUST invoke - * Surface.renderAll() after performing a Task if no tasks remain - * in the queue. A scheduler may choose to invoke - * Surface.renderAll() more often than that if it so chooses. + * INVARIANT: all scheduler implementations MUST invoke Surface.renderAll() after performing a Task if no tasks remain + * in the queue. A scheduler may choose to invoke Surface.renderAll() more often than that if it so chooses. */ public void run() { defaultRun(); } + protected Scheduler() { } - // Default Implementation ///////////////////////////////////// + // Default Implementation ////////////////////////////////////////////////////// protected static Queue runnable = new Queue(50); - private static final Scheduler singleton = Platform.getScheduler(); public void defaultRun() { while(true) { Task t = (Task)runnable.remove(true); try { t.perform(); - // FIXME: be smarter about this + // FEATURE: be smarter about this Surface.renderAll(); } catch (Exception e) { Log.log(Scheduler.class, "Task threw an exception: " + e);