sclass WaitForStableValue { long period; A value; long valueSince; *() {} *(long *period) {} *(double seconds) { period = toMS(seconds); } synchronized A set(A a) { if (neq(a, value)) { value = a; valueSince = sysNow(); } ret get(); } synchronized A get() { ret valueSince != 0 && sysNow() >= valueSince+period ? value : null; } public bool has() { ret get() != null; } void clear() { set(null); } }