示例#1
0
        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);
        }
示例#2
0
        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;
        }
示例#3
0
 static void AddTimer(GUCAbstractTimer timer)
 {
     activeTimers.Insert(FindIndex(timer.NextCallTime), timer);
 }