2013-01-22 98 views
1

下面的問題是關於統一遊戲引擎的,但它可能與任何試圖將數據發送到主線程(如UI線程)的程序有關。線程通信

我正在一個單獨的線程上處理一些數據(位置數據從套接字asyncrously讀取)。但是,我需要在主線程上處理這些數據(遊戲對象的變換隻能從主線程訪問)。我想到的方法是創建一個線程安全隊列並遵循生產者 - 消費者模式。線程會對位置數據進行排隊,主線程會將數據取出並對其執行操作。 *注意:在Unity中,我無法訪問System.Windows.Threading名稱空間,因此我無法使用Dispatcher。此外,它需要.Net 3.5,所以我不能使用Collections.Concurrent名稱空間。

有沒有更好的方法?

如果沒有,數據排隊時通知主線程的最佳方式是什麼?這似乎沒有效率輪詢,但我想不出任何方式。

在此先感謝。

+0

Unity標籤用於Microsoft Unity。請不要濫用它。 –

回答

1

這是一個完全可行的線程方法。正如你可能知道的那樣,在計算機硬件中發現輪詢的替代方案是中斷的概念。

如何模擬多線程高級計算機程序中的中斷?很難說 - 你的線程的變化將不得不通知UI線程「嗨,我準備好了」,而​​不是UI線程不斷檢查。這需要某種消息傳遞,實際上 - 這可能是行不通的。

這就是說,典型的遊戲設計方法是「遊戲循環」,它本質上是輪詢。所以在那場比賽中沒有什麼可恥的 - 你只需要確保它不會謀殺你的表現。

0

可能是this question已爲您解答。

然而,輪詢一個隊列是一個更清潔的解決方案恕我直言,如果做得對,並不昂貴,並在互聯網上有大量的例子。