Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
 public void Push(ISequenceData data)
 {
     queue.Enqueue(data);
 }