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