IEnumerator Process() { if (queue.Count <= 0) { yield break; } float debugTime = 0f; int popCnt = Mathf.Min(queue.Count, mConcurr); for (int i = 0; i < popCnt; ++i) { ISequenceData data = queue.Dequeue(); data.IsComplete = false; mProcessingSeqs.Add(data); } int _completeMask = 0x00; int _isAllComplete = 0x00; for (int i = 0; i < mProcessingSeqs.Count; ++i) { _isAllComplete |= 1 << i; mProcessingSeqs[i].Process(); } while (_completeMask != _isAllComplete) { debugTime += Time.deltaTime; if (debugTime >= 5) { Debug.Log($"Processing... Stack Trace : {StackTraceUtility.ExtractStackTrace()}"); debugTime = 0f; } for (int i = 0; i < mProcessingSeqs.Count; ++i) { if (mProcessingSeqs[i].IsComplete) { _completeMask |= 1 << i; } } yield return(null); } mProcessingSeqs.Clear(); }
public void Push(ISequenceData data) { queue.Enqueue(data); }