sclass FixedRateTimer extends java.util.Timer { *() { this(false); } *(bool daemon) { this(defaultTimerName(), daemon); } *(S name) { this(name, false); } *(S name, bool daemon) { super(name, daemon); _registerTimer(this); } L entries = synchroList(); srecord noeq Entry(TimerTask task, long firstTime, long period) {} // Note: not all methods overridden; only use these once public void scheduleAtFixedRate(TimerTask task, long delay, long period) { entries.add(new Entry(task, now()+delay, period)); super.scheduleAtFixedRate(task, delay, period); } public void cancel() { entries.clear(); super.cancel(); } public int purge() { entries.clear(); ret super.purge(); } }