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 时,它会一遍又一遍地跳回它,然后才最终开始实际检查碰撞。

现在我的碰撞延迟了5-10秒......

如果有人有见识,请在此处输入一些内容。

4

1 回答 1

1

XBOX 360 有 3 个核心,每个核心有 2 个硬件线程,总共产生 6 个硬件线程。线程 0 和 2 由 XNA 框架保留,留下 1、3、4 和 5 供您使用。

As for the question, why are you creating a new thread after checking for collisions, to do exactly the same all over again? If you need to repeat the collision checking in a thread, simply put it inside a while(true) loop to keep it going.

于 2012-09-05T01:44:05.527 回答