using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; /// /// 回调通知函数 /// /// /// /// public delegate void DispatcherTimerEventHandler(object sender, EventArgs args); /// /// Unity中没有找到主线程Timer,模拟实现 /// public class DispatcherTimer : IDisposable { //超过计时器间隔时发生。 public DispatcherTimerEventHandler Tick = null; private string _Name = "未知"; private bool _Started = false; //是否已经开始 private long _LastTicks = 0; //必须赋值一个特殊的名称,用于监控cpu占用 public DispatcherTimer(string name) { _Name = name; DispatcherTimerDriver.AddTimer(this); } /// /// 计时器名称 /// public string Name { get { return _Name; } set { _Name = value; } } private TimeSpan _Interval = TimeSpan.Zero; /// /// 设置计时器的时间间隔 /// public TimeSpan Interval { get { return _Interval; } set { _Interval = value; } } /// /// 开始计时器 /// public void Start() { _Started = true; _LastTicks = DateTime.Now.Ticks; } /// /// 停止计时器 /// public void Stop() { _Started = false; } /// /// 执行与释放或重置非托管资源相关的应用程序定义的任务 /// public void Dispose() { DispatcherTimerDriver.RemoveTimer(this); } /// /// 执行timer /// public void ExecuteTimer() { long ticks = DateTime.Now.Ticks; if (ticks - _LastTicks < _Interval.Ticks) { return; } _LastTicks = ticks; if (null != Tick) { long startTicks = DateTime.Now.Ticks / 10000; Tick(this, EventArgs.Empty); long elapsedTicks = (DateTime.Now.Ticks / 10000) - startTicks; if (elapsedTicks >= 100) { ////DesignDebug.Log("DispatcherTimer.ExecuteTimer, Name=" + _Name + ", Used ticks=" + elapsedTicks); } } } }