1

次の質問はUnityゲームエンジンに関するものですが、UIスレッドなどのメインスレッドにデータを送信しようとしているプログラムに関連している可能性があります。

別のスレッドでいくつかのデータを処理しています(データをソケットから非同期に読み取ります)。ただし、メインスレッドでこのデータを操作する必要があります(ゲームオブジェクトの変換にはメインスレッドからのみアクセスできます)。私が念頭に置いているアプローチは、スレッドセーフなキューを作成し、生産者/消費者パターンに従うことです。スレッドは位置データをキューに入れ、メインスレッドはデータをデキューしてそれに基づいて動作します。*注:Unityでは、System.Windows.Threading名前空間にアクセスできないため、Dispatcherを使用できません。また、.Net 3.5が必要なため、Collections.Concurrent名前空間も使用できません。

より良いアプローチはありますか?

ない場合、データがキューに入れられたときにメインスレッドに通知するための最良の方法は何ですか?投票するのは非効率的なようですが、私はそれを回避する方法を考えることができません。

前もって感謝します。

4

2 に答える 2

1

これは、スレッド化に対する完全に実行可能なアプローチです。ご存知かもしれませんが、コンピュータハードウェアに見られるポーリングの代替手段は、割り込みの概念です。

マルチスレッドの高水準コンピュータプログラムで割り込みをどのようにシミュレートしますか?言うのは難しいです-変更するスレッドは、UIスレッドが常にチェックするのではなく、UIスレッドに「準備ができました」と通知する必要があります。これには、ある種のメッセージパッシングが必要です。実際には、実行できない場合があります。

そうは言っても、典型的なゲームデザインのアプローチは、本質的にポーリングを行う「ゲームループ」です。したがって、そのゲームには恥はありません。パフォーマンスを損なうことがないことを確認する必要があります。

于 2013-01-22T14:29:05.200 に答える
0

この質問に答えがあるかもしれません。

ただし、キューのポーリングはIMHOのよりクリーンなソリューションであり、正しく実行され、インターネットに多数の例がある場合はそれほどコストがかかりません。

于 2013-01-22T14:33:10.180 に答える