2

そこで、非常に効率的な衝突検出システムを開発しましたが、問題は、あまりにも遅いためにメイン スレッドで実行できないことです。

スレッドを設定してみましたが、スレッドが終了すると、別のスレッドが作成されます。

if (doneCollisions)
            {
                PopulateGrid();
            }


            if (doneCollisions)
            {
                Thread thread = new Thread(new ThreadStart(CheckCollisionsGrid));

                thread.Start();

            }

void CheckCollisionsGrid()
{
Thread.CurrentThread.SetProcessorAffinity(3);
            doneCollisions = false;
            //Increments through all the grids.
.
.
.
doneCollisions = true;
}

デバッグ中に奇妙な動作に気付きました。私が Thread.SetAffinity を呼び出したとき、実際に衝突のチェックを開始する前に、1 回か 2 回何度も戻ってきました。

そして今、私の衝突は5〜10秒遅れています...

誰かが洞察を持っている場合は、ここに入力してください。

4

1 に答える 1

1

XBOX 360 には 3 つのコアがあり、コアごとに 2 つのハードウェア スレッドがあり、合計 6 つのハードウェア スレッドを生成します。スレッド 0 と 2 は XNA フレームワークによって予約されており、1、3、4、および 5 を使用できます。

質問に関しては、まったく同じことをやり直すために、衝突をチェックした後に新しいスレッドを作成するのはなぜですか? スレッドで衝突チェックを繰り返す必要がある場合は、単純にwhile(true)ループ内に配置して続行します。

于 2012-09-05T01:44:05.527 に答える