以下问题是关于统一游戏引擎,但它可能与试图将数据发送到主线程的任何程序有关,例如UI线程。
我正在一个单独的线程上处理一些数据(位置数据从套接字中被异常读取)。但是,我需要在主线程上对此数据进行操作(游戏对象的转换只能从主线程访问)。我想到的方法是创建一个线程安全的队列并遵循生产者 - 消费者模式。线程将对位置数据进行排队,主线程将对数据进行双端化并对其进行操作。 *注意:在Unity中,我无法访问System.Windows.Threading名称空间,因此我无法使用Dispatcher。此外,它需要.Net 3.5,所以我也不能使用Collections.Concurrent名称空间。
有更好的方法吗?
如果没有,在数据排队时通知主线程的最佳方法是什么?民意调查似乎效率低下,但我无法想到任何方式......
提前致谢。
答案 0 :(得分:1)
这是一种完全可行的线程方法。您可能知道,计算机硬件中的轮询替代方法是中断的概念。
您如何模拟多线程高级计算机程序中的中断?很难说 - 你改变的线程必须通知UI线程“嘿我已经准备好”,而不是经常检查UI线程。这需要某种消息传递,实际上 - 它可能不可行。
话虽这么说,典型的游戏设计方法是“游戏循环”,基本上是民意调查。所以在那场比赛中没有任何耻辱 - 你必须确保它不会谋杀你的表现。
答案 1 :(得分:0)
可能this question有答案。
然而,轮询队列是一个更清洁的解决方案恕我直言,如果做得不对,并没有那么昂贵,互联网上有大量的例子。