void OnUpdate()
        {
            if (!m_active)
            {
                return;
            }

            if (m_timers.Count > 0)
            {
                var enumerator = m_timers.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    if (enumerator.Current.Value.IsDone)
                    {
                        m_toRemove.Add(enumerator.Current.Value);
                    }
                    else
                    {
                        enumerator.Current.Value.OnUpdate();
                    }
                }
                enumerator.Dispose();
            }

            int removeLen = m_toRemove.Count;

            if (removeLen > 0)
            {
                for (int i = 0; i < removeLen; i++)
                {
                    TimerData timer = m_toRemove[i];
                    m_timers.Remove(timer.Id);
                    m_timerPool.Release(timer);
                }
                m_toRemove.Clear();
            }

            int addLen = m_toAdd.Count;

            if (addLen > 0)
            {
                for (int i = 0; i < addLen; i++)
                {
                    m_timers.Add(m_toAdd[i].Id, m_toAdd[i]);
                }
                m_toAdd.Clear();
            }
        }
        public void SetPause(uint timerId, bool pause)
        {
            TimerData timer = GetTimerData(timerId);

            timer.SetPause(pause);
        }