Exemple #1
0
        public void TimerMain(IResetableTask resetInterface)
        {
            DateTime now;
            int      i, j;
            bool     loaded;

            while (resetInterface.IsActive())
            {
                ProcessChangeQueue();

                loaded = false;

                for (i = 0; i < mTimers.Length; i++)
                {
                    now = DateTime.Now;
                    if (now < mNextPriorities[i])
                    {
                        break;
                    }

                    mNextPriorities[i] = now + mPriorityDelays[i];

                    for (j = 0; j < mTimers[i].Count; j++)
                    {
                        var t = mTimers[i][j];

                        if (!t.Queued && now > t.Next)
                        {
                            t.Queued = true;

                            lock (Timer.Queue) {
                                Timer.Queue.Enqueue(t);
                            }

                            loaded = true;

                            if (t.Count != 0 && (++t.Index >= t.Count))
                            {
                                t.Stop();
                            }
                            else
                            {
                                t.Next = now + t.Interval;
                            }
                        }
                    }
                }

                if (loaded)
                {
                    resetInterface.Set();
                }

                mSignal.WaitOne(10, false);
            } // while resetInterface.IsActive()
        }     // TimerMain()
Exemple #2
0
        public void TimerMain(IResetableTask resetInterface)
        {
            DateTime now;
            int i, j;
            bool loaded;

            while (resetInterface.IsActive()) {
                ProcessChangeQueue();

                loaded = false;

                for (i = 0; i < mTimers.Length; i++) {
                    now = DateTime.Now;
                    if (now < mNextPriorities[i]) {
                        break;
                    }

                    mNextPriorities[i] = now + mPriorityDelays[i];

                    for (j = 0; j < mTimers[i].Count; j++) {
                        var t = mTimers[i][j];

                        if (!t.Queued && now > t.Next) {
                            t.Queued = true;

                            lock (Timer.Queue) {
                                Timer.Queue.Enqueue(t);
                            }

                            loaded = true;

                            if (t.Count != 0 && (++t.Index >= t.Count)) {
                                t.Stop();
                            } else {
                                t.Next = now + t.Interval;
                            }
                        }
                    }
                }

                if (loaded) {
                    resetInterface.Set();
                }

                mSignal.WaitOne(10, false);
            } // while resetInterface.IsActive()
        }