static class ReliableSingleThread implements Runnable { O runnable; bool trigger; Thread thread; *(O *runnable) {} void trigger() { go(); } synchronized void go() { trigger = true; if (!running()) thread = startThread("Single Thread", r { _run(); }); } public void run() { go(); } synchronized bool running() { ret thread != null; } // use only if this is the last time you trigger this void triggerAndWait() { trigger(); while (running()) sleep(1); } void _run() { while licensed { synchronized(this) { if (!trigger) { thread = null; break; } trigger = false; } pcallF(runnable); } } synchronized void cancel() { cancelAndInterruptThread(thread); thread = null; } }