コード例 #1
0
ファイル: TimerX.cs プロジェクト: yuyixiaoxiang/X
        /// <summary>实例化一个不可重入的定时器</summary>
        /// <param name="callback">委托</param>
        /// <param name="state">用户数据</param>
        /// <param name="dueTime">多久之后开始。毫秒</param>
        /// <param name="period">间隔周期。毫秒</param>
        /// <param name="scheduler">调度器</param>
        public TimerX(WaitCallback callback, Object state, Int32 dueTime, Int32 period, String scheduler = null)
        {
            if (dueTime < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(dueTime));
            }
            //if (period < 0) throw new ArgumentOutOfRangeException("period");

            Callback = new WeakAction <Object>(callback) ?? throw new ArgumentNullException(nameof(callback));
            State    = state;
            Period   = period;

            NextTime = DateTime.Now.AddMilliseconds(dueTime);

            Scheduler = scheduler.IsNullOrEmpty() ? TimerScheduler.Default : TimerScheduler.Create(scheduler);
            Scheduler.Add(this);
        }
コード例 #2
0
        /// <summary>创建指定名称的调度器</summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static TimerScheduler Create(String name)
        {
            if (_cache.TryGetValue(name, out var ts))
            {
                return(ts);
            }
            lock (_cache)
            {
                if (_cache.TryGetValue(name, out ts))
                {
                    return(ts);
                }

                ts           = new TimerScheduler(name);
                _cache[name] = ts;

                WriteLog("启动定时调度器:{0}", name);

                return(ts);
            }
        }
コード例 #3
0
ファイル: TimerScheduler.cs プロジェクト: youngbeangeek/X
        /// <summary>创建指定名称的调度器</summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static TimerScheduler Create(String name)
        {
            TimerScheduler ts = null;

            if (_cache.TryGetValue(name, out ts))
            {
                return(ts);
            }
            lock (_cache)
            {
                if (_cache.TryGetValue(name, out ts))
                {
                    return(ts);
                }

                ts           = new TimerScheduler(name);
                _cache[name] = ts;

                return(ts);
            }
        }
コード例 #4
0
        /// <summary>实例化一个绝对定时器</summary>
        /// <param name="callback">委托</param>
        /// <param name="state">用户数据</param>
        /// <param name="startTime">绝对开始时间</param>
        /// <param name="period">间隔周期。毫秒</param>
        /// <param name="scheduler">调度器</param>
        public TimerX(WaitCallback callback, Object state, DateTime startTime, Int32 period, String scheduler = null)
        {
            if (callback == null)
            {
                throw new ArgumentNullException(nameof(callback));
            }
            if (startTime <= DateTime.MinValue)
            {
                throw new ArgumentOutOfRangeException(nameof(startTime));
            }
            //if (period < 0) throw new ArgumentOutOfRangeException("period");

            Callback   = callback;
            State      = state;
            Period     = period;
            Absolutely = true;

            var now  = DateTime.Now;
            var next = startTime;

            if (period % 1000 == 0)
            {
                var s = period / 1000;
                while (next < now)
                {
                    next = next.AddSeconds(s);
                }
            }
            else
            {
                while (next < now)
                {
                    next = next.AddMilliseconds(period);
                }
            }
            NextTime = next;

            Scheduler = scheduler.IsNullOrEmpty() ? TimerScheduler.Default : TimerScheduler.Create(scheduler);
            Scheduler.Add(this);
        }