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