sclass FixedRateTimer extends java.util.Timer implements AutoCloseable { *() { 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 ones 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(); } FixedRateTimer changeRate(int newPeriod) { O r = ((SmartTimerTask) first(entries).task).r; cancel(); ret doEvery(newPeriod, r); } close { cancel(); } }