【发布时间】:2016-09-02 09:52:45
【问题描述】:
我在我的游戏中实现了System.Collections.Queue 来收集所有传入的 TCP 消息。
现在,我只是在Update() 中处理Queue 中最旧的消息(如果队列不为空)
但是,两帧之间的时间通常比处理消息所用的时间长。
我想知道是否有一种方法可以在前一个消息完成时处理消息,而不会冻结游戏。
我尝试过使用协程,但它没有任何改变,因为 yield return null; 似乎在等待下一帧(所以它就像一个 Update())。
【问题讨论】:
-
如果不发布您的 TCP 代码,就很难判断您做错了什么。
-
消息只是可以随时到达的信息。有时一秒钟可能有一百多条消息,Unity需要一一处理。但我不能在每个之间等待 1/60 秒
-
使用某种线程在后台处理消息或使用 TCP 类提供的异步方法而不是排队。
-
再一次,没有看到你的代码,我不知道发生了什么。我要求提供代码,因为我感觉您是在主线程中执行此操作,这会减慢 Unity 甚至在从服务器读取时冻结。就像 null 说的那样,您必须在另一个线程中执行此操作或使用异步函数。
标签: c# multithreading unity3d queue coroutine