/// <summary> /// 添加定时任务 /// </summary> /// <param name="task"></param> /// <param name="taskInfo"></param> /// <returns></returns> private bool AddTimerTask(TimerTask task, TimerTaskInfo taskInfo) { if (!task.IsValidTask()) { return(false); } for (int i = 0; i < m_WheelArr.Length; i++) { int slotIndex = -1; int taskListIndex = -1; if (m_WheelArr[i].AddTimerTask(task, ref slotIndex, ref taskListIndex)) { taskInfo.WheelSlotIndex = slotIndex; taskInfo.TaskListIndex = taskListIndex; taskInfo.WheelIndex = i; break; } } if (taskInfo.WheelIndex < 0 || taskInfo.WheelSlotIndex < 0 || taskInfo.TaskListIndex < 0) { return(false); } m_TaskIndex++; task.Index = m_TaskIndex; taskInfo.Index = m_TaskIndex; m_TaskInfoDic.Add(taskInfo.Index, taskInfo); return(true); }
/// <summary> /// 指定 /// </summary> /// <param name="index"></param> /// <param name="taskList"></param> private void OnTimerWheelTrigger(int index, List <TimerTask> taskList) { for (int i = 0; i < taskList.Count; i++) { TimerTask task = taskList[i]; if (task == null) { continue; } TimerTaskInfo taskInfo = null; if (!m_TaskInfoDic.TryGetValue(task.Index, out taskInfo)) { continue; } if (task.RemainingWheelInMS == 0) { task.OnTrigger(); } if (taskInfo.IsClear()) { RecycleTimerTask(task); } else { m_TaskInfoDic.Remove(task.Index); taskInfo.OnClear(); if (task.IsValidTask()) { AddTimerTask(task, taskInfo); } else { RecycleTimerTask(task); } } } }