static bool RemoveTimer(GUCAbstractTimer timer) { //return activeTimers.Remove(timer); int index = FindIndex(timer.NextCallTime); int i = index; if (index >= activeTimers.Count) { return(false); } while (activeTimers[i] != timer) { i++; if (i >= activeTimers.Count || activeTimers[i].NextCallTime != timer.NextCallTime) { i = index; do { i--; if (i < 0 || activeTimers[i].NextCallTime != timer.NextCallTime) { return(false); // has not been in the list } } while (activeTimers[i] != timer); break; } } activeTimers.RemoveAt(index); return(true); }
internal static void Update(long now) { int index; while ((index = activeTimers.Count - 1) >= 0) { GUCAbstractTimer timer = activeTimers[index]; if (timer.NextCallTime > now) { break; } activeTimers.RemoveAt(index); currentTimer = timer; // in case of Fire() changing the interval so SetNextCallTime is not called twice timer.Fire(); if (timer.Started) // still running? { timer.SetNextCallTime(now); } } currentTimer = null; }
static void AddTimer(GUCAbstractTimer timer) { activeTimers.Insert(FindIndex(timer.NextCallTime), timer); }