1

以下问题是关于统一游戏引擎的,但它可能与任何试图将数据发送到主线程(例如 UI 线程)的程序有关。

我正在一个单独的线程上处理一些数据(定位数据从套接字异步读取)。但是,我需要在主线程上处理这些数据(游戏对象的变换只能从主线程访问)。我想到的方法是创建一个线程安全队列并遵循生产者-消费者模式。线程将对位置数据进行排队,主线程将数据出列并对其进行操作。*注意:在 Unity 中,我无法访问 System.Windows.Threading 名称空间,因此无法使用 Dispatcher。此外,它需要 .Net 3.5,所以我也不能使用 Collections.Concurrent 名称空间。

有更好的方法吗?

如果没有,当数据排队时通知主线程的最佳方法是什么?投票似乎效率低下,但我想不出任何办法。

提前致谢。

4

2 回答 2

1

这是一种完全可行的线程化方法。您可能知道,在计算机硬件中发现的轮询的替代方法是中断的概念。

您将如何在多线程高级计算机程序中模拟中断?很难说 - 您的线程更改必须通知 UI 线程“嘿,我准备好了”,而​​不是 UI 线程不断检查。这需要某种消息传递,真的——这可能不可行。

话虽如此,典型的游戏设计方法是“游戏循环”,本质上是投票。所以在那场比赛中没有什么可耻的——你只需要确保它不会扼杀你的表现。

于 2013-01-22T14:29:05.200 回答
0

或许这个问题对你有答案。

但是,轮询队列是一种更清洁的解决方案恕我直言,如果做得好并且互联网上有大量示例,成本不会那么高。

于 2013-01-22T14:33:10.180 回答