Пример #1
0
            public void Set(IOThreadTimer timer, long dueTime)
            {
                long num = dueTime - timer.dueTime;

                if (num < (long)0)
                {
                    num = -num;
                }
                if (num > timer.maxSkew)
                {
                    lock (this.ThisLock)
                    {
                        IOThreadTimer.TimerGroup timerGroup = timer.timerGroup;
                        IOThreadTimer.TimerQueue timerQueue = timerGroup.TimerQueue;
                        if (timer.index > 0)
                        {
                            if (timerQueue.UpdateTimer(timer, dueTime))
                            {
                                IOThreadTimer.TimerManager.UpdateWaitableTimer(timerGroup);
                            }
                        }
                        else if (timerQueue.InsertTimer(timer, dueTime))
                        {
                            IOThreadTimer.TimerManager.UpdateWaitableTimer(timerGroup);
                            if (timerQueue.Count == 1)
                            {
                                this.EnsureWaitScheduled();
                            }
                        }
                    }
                }
            }
Пример #2
0
 private static void ReactivateWaitableTimer(IOThreadTimer.TimerGroup timerGroup)
 {
     IOThreadTimer.TimerQueue timerQueue = timerGroup.TimerQueue;
     if (timerQueue.Count <= 0)
     {
         timerGroup.WaitableTimer.Set(9223372036854775807L);
         return;
     }
     timerGroup.WaitableTimer.Set(timerQueue.MinTimer.dueTime);
 }
Пример #3
0
 private static void ScheduleElapsedTimers(IOThreadTimer.TimerGroup timerGroup, long now)
 {
     IOThreadTimer.TimerQueue timerQueue = timerGroup.TimerQueue;
     while (timerQueue.Count > 0)
     {
         IOThreadTimer minTimer = timerQueue.MinTimer;
         if (minTimer.dueTime - now > minTimer.maxSkew)
         {
             break;
         }
         timerQueue.DeleteMinTimer();
         ActionItem.Schedule(minTimer.callback, minTimer.callbackState);
     }
 }
Пример #4
0
            public bool Cancel(IOThreadTimer timer)
            {
                bool flag;

                lock (this.ThisLock)
                {
                    if (timer.index <= 0)
                    {
                        flag = false;
                    }
                    else
                    {
                        IOThreadTimer.TimerGroup timerGroup = timer.timerGroup;
                        IOThreadTimer.TimerQueue timerQueue = timerGroup.TimerQueue;
                        timerQueue.DeleteTimer(timer);
                        if (timerQueue.Count <= 0)
                        {
                            IOThreadTimer.TimerGroup otherTimerGroup = this.GetOtherTimerGroup(timerGroup);
                            if (otherTimerGroup.TimerQueue.Count == 0)
                            {
                                long now     = Ticks.Now;
                                long dueTime = timerGroup.WaitableTimer.DueTime - now;
                                long num     = otherTimerGroup.WaitableTimer.DueTime - now;
                                if (dueTime > (long)10000000 && num > (long)10000000)
                                {
                                    timerGroup.WaitableTimer.Set(Ticks.Add(now, (long)10000000));
                                }
                            }
                        }
                        else
                        {
                            IOThreadTimer.TimerManager.UpdateWaitableTimer(timerGroup);
                        }
                        flag = true;
                    }
                }
                return(flag);
            }
Пример #5
0
 public TimerGroup()
 {
     this.waitableTimer = new IOThreadTimer.WaitableTimer();
     this.waitableTimer.Set(9223372036854775807L);
     this.timerQueue = new IOThreadTimer.TimerQueue();
 }