public void remove_event(steady_timer steadyTime) { _workEngine.service.post(delegate() { if (_exited) { return; } if (null != steadyTime._waitableNode) { long lastAbsus = steadyTime._waitableNode.Key; _eventsQueue.Remove(steadyTime._waitableNode); steadyTime._waitableNode = null; if (0 == _eventsQueue.Count) { _expireTime = long.MaxValue; CancelWaitableTimer(_timerHandle); } else if (lastAbsus == _expireTime) { _expireTime = _eventsQueue.First.Key; set_timer(); } } }); }
public void removeEvent(steady_timer steadyTime) { _workStrand.post(delegate() { if (null != steadyTime._waitableNode) { long lastAbsus = steadyTime._waitableNode.Key; _eventsQueue.Remove(steadyTime._waitableNode); steadyTime._waitableNode = null; if (0 == _eventsQueue.Count) { _expireTime = long.MaxValue; CancelWaitableTimer(_timerHandle); } else if (lastAbsus == _expireTime) { _expireTime = _eventsQueue.First.Key; if (_utcMode) { long sleepTime = _expireTime * 10; sleepTime = sleepTime > 0 ? sleepTime : 0; SetWaitableTimer(_timerHandle, ref sleepTime, 0, 0, 0, 0); } else { long sleepTime = -(_expireTime - system_tick.get_tick_us()) * 10; sleepTime = sleepTime < 0 ? sleepTime : 0; SetWaitableTimer(_timerHandle, ref sleepTime, 0, 0, 0, 0); } } } }); }