// Update is called once per frame public virtual void Update() { _luaenv.Tick(); if (_cotype == CoType.CO) { CoWorker(); while (_renderQueue.Count > 0) { Actor.RenderHandler handler = _renderQueue.Dequeue(); _app.StartCoroutine(CoHandler(handler)); //handler(); } } else { // 此段代码可以用协程 while (_renderQueue.Count > 0) { Actor.RenderHandler handler = null; lock (_renderQueue) { handler = _renderQueue.Dequeue(); } handler(); } } }
IEnumerator CoHandler(Actor.RenderHandler handler) { try { handler(); } catch (Exception ex) { UnityEngine.Debug.LogException(ex); } yield break; }
public void EnqueueRenderQueue(Actor.RenderHandler handler) { if (_cotype == CoType.THREAD) { lock (_renderQueue) { _renderQueue.Enqueue(handler); } } else if (_cotype == CoType.CO) { _renderQueue.Enqueue(handler); } }
public void EnqueueRenderQueue(Actor.RenderHandler handler) { _application.EnqueueRenderQueue(handler); }