private static void ProcessChangeQueue() { while (mChangeQueue.Count > 0) { TimerChangeEntry tce = (TimerChangeEntry)mChangeQueue.Dequeue(); Timer timer = tce.mTimer; int newIndex = tce.mNewIndex; if (timer.List != null) { timer.List.Remove(timer); } if (tce.mIsAdd) { timer.Next = DateTime.Now + timer.Delay; timer.Index = 0; } if (newIndex >= 0) { timer.List = mTimers[newIndex]; timer.List.Add(timer); } else { timer.List = null; } tce.Free(); } }
public static TimerChangeEntry GetInstance(Timer t, int newIndex, bool isAdd) { TimerChangeEntry e; if (mInstancePool.Count > 0) { e = mInstancePool.Dequeue(); if (e == null) e = new TimerChangeEntry(t, newIndex, isAdd); else { e.mTimer = t; e.mNewIndex = newIndex; e.mIsAdd = isAdd; } } else { e = new TimerChangeEntry(t, newIndex, isAdd); } return e; }
public static void Change(Timer t, int newIndex, bool isAdd) { mChangeQueue.Enqueue(TimerChangeEntry.GetInstance(t, newIndex, isAdd)); mSignal.Set(); }