Aegis.Calculate.IntervalTimer.TimerThreadRunner C# (CSharp) Method

TimerThreadRunner() private static method

private static TimerThreadRunner ( ) : void
return void
        private static void TimerThreadRunner()
        {
            MinMaxValue<long> sleepTime = new MinMaxValue<long>(0);
            List<IntervalTimer> deprecated = new List<IntervalTimer>();

            while (true)
            {
                if (_threadWait.WaitOne((int)sleepTime.Min) == true)
                    break;

                using (_lock.ReaderLock)
                {
                    deprecated.Clear();
                    sleepTime.Reset(100);

                    foreach (var timer in _queue)
                    {
                        long remainTime = timer.Interval - (_stopwatch.ElapsedMilliseconds - timer._lastCallTime);
                        if (remainTime > 0)
                            sleepTime.Value = remainTime;
                        else
                        {
                            timer._lastCallTime = _stopwatch.ElapsedMilliseconds;
                            SpinWorker.Dispatch(timer._action);

                            //  호출횟수 만료
                            if (timer._remainCount != -1 &&
                                --timer._remainCount == 0)
                                deprecated.Add(timer);
                        }
                    }
                }

                foreach (var timer in deprecated)
                    timer.Dispose();
            }
            _timerThread = null;
        }