Introduce TimerCallback2.

This allows getting notified also if the timer has been stopped, so that it is guaranteed to be called, except if cancelWait is called.

Necessary for fixing vibe-d/vibe-core#86
This commit is contained in:
Sönke Ludwig 2018-10-27 12:33:10 +02:00
parent 42f96060c9
commit dbb8267540
3 changed files with 33 additions and 6 deletions

View file

@ -57,6 +57,21 @@ void main()
eventDriver.timers.set(tm, 1200.msecs, 0.msecs);
// test if stop() produces a callback with fire==false
bool got_event = false;
auto tm2 = eventDriver.timers.create();
eventDriver.timers.wait(tm2, (t, fired) { assert(!fired); got_event = true; });
eventDriver.timers.set(tm2, 100.msecs, 0.msecs);
eventDriver.timers.stop(tm2);
assert(got_event);
// test that cancelWait() does not produce a callback
eventDriver.timers.wait(tm2, (t, fired) { assert(false); });
eventDriver.timers.set(tm2, 100.msecs, 0.msecs);
eventDriver.timers.cancelWait(tm2);
eventDriver.timers.stop(tm2);
ExitReason er;
do er = eventDriver.core.processEvents(Duration.max);
while (er == ExitReason.idle);