/// <summary> /// 指定したコルーチンを終了させます。 /// </summary> /// <param name="routine"></param> public void StopCoroutine(CRoutine routine) { if (_updateing) { if (_updates.TryAdd(routine, _OpCode.REMOVE)) { routine.Cancel(); } } else { if (_routines.Remove(routine)) { routine.Cancel(); } } }
/// <summary> /// コルーチンを開始させます。 /// </summary> /// <param name="routine"></param> /// <returns></returns> public CRoutine StartCoroutine(IEnumerable routine) { _handle += 1; CRoutine r = new CRoutine(_handle, routine); if (_updateing) { // 実際に追加されるのは次のフレームとなってしまうため同一フレーム内で進めます。 if (r.Updater.MoveNext()) { _updates.TryAdd(r, _OpCode.ADD); } } else { _routines.Add(r); } return(r); }
static void Main(string[] args) { //manager.StartCoroutine(Co1()); //manager.Start(Co3()); manager.StartCoroutine(Co5()); routine = manager.StartCoroutineSequence(Co1(), Co2()); manager.StartCoroutine(Co4()); //manager.StopCoroutine(routine); CTasker tasker = new CTasker(); tasker.Run(manager.Update); while (true) { Thread.Sleep(1000); } }