X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FScheduler.java;h=d61ad556fc32e1f8f0a6772c70689918c92481cf;hb=b4683a8f73d90fc0d4926775dfbc7268c34e6bff;hp=79fba3c04539707819c3dec767882ebe5570bf88;hpb=67eeff476179a91ae930ea89cbecde22132ca532;p=org.ibex.core.git diff --git a/src/org/xwt/Scheduler.java b/src/org/xwt/Scheduler.java index 79fba3c..d61ad55 100644 --- a/src/org/xwt/Scheduler.java +++ b/src/org/xwt/Scheduler.java @@ -8,23 +8,41 @@ import org.xwt.util.*; /** Implements cooperative multitasking */ public class Scheduler { + // FIXME: prepending events messes with keysate -- make a "no re-ordering" invariant? + // Public API Exposed to org.xwt ///////////////////////////////////////////////// private static Scheduler singleton; - public static abstract class Task { public abstract void perform(); } + public static interface Task { public abstract void perform() throws Exception; } + + /** adds a task to the back of the queue */ public static void add(Task t) { singleton.runnable.append(t); } - public static void init() { - if (singleton != null) return; - singleton = Platform.getScheduler(); - singleton.run(); + + /** adds a task to the front of the queue (guaranteed to run next) */ + public static void addAtFront(Task t) { singleton.runnable.prepend(t); } + + public static void init() { if (singleton == null) (singleton = Platform.getScheduler()).run(); } + + private static Task current = null; + public static Task current() { return current; } + + /** synchronizd so that we can safely call it from an event-delivery thread, in-context */ + public static synchronized void renderAll() { + for(int i=0; i