示例#1
0
        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();
            }
        }
示例#2
0
		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;
		}
示例#3
0
 public static void Change(Timer t, int newIndex, bool isAdd)
 {
     mChangeQueue.Enqueue(TimerChangeEntry.GetInstance(t, newIndex, isAdd));
     mSignal.Set();
 }