Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xbox 360上的Thread.SetAffinity和XNA线程问题_C#_Xna_Xbox360 - Fatal编程技术网

C# Xbox 360上的Thread.SetAffinity和XNA线程问题

C# Xbox 360上的Thread.SetAffinity和XNA线程问题,c#,xna,xbox360,C#,Xna,Xbox360,所以我开发了一个非常有效的碰撞检测系统,但问题是它仍然不能在主线程上运行,因为它太慢了 我尝试设置一些线程,如果线程结束,就会创建另一个线程 if (doneCollisions) { PopulateGrid(); } if (doneCollisions) { Thread thread = new Thread(new Thre

所以我开发了一个非常有效的碰撞检测系统,但问题是它仍然不能在主线程上运行,因为它太慢了

我尝试设置一些线程,如果线程结束,就会创建另一个线程

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秒


如果有人有见解,请在这里输入一些

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


至于这个问题,为什么要在检查冲突后创建一个新线程,以便再次执行完全相同的操作?如果您需要在线程中重复冲突检查,只需将其放入whiletrue循环中即可继续运行。

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


至于这个问题,为什么要在检查冲突后创建一个新线程,以便再次执行完全相同的操作?如果您需要在线程中重复冲突检查,只需将其放入whiletrue循环以保持其运行。

imho,关联性非常低,计划程序将尝试开始操作,但会恢复该操作,因为有更高的关联性可以做更好的事。。。只有在5-10秒后,调度程序才能为您的操作找到一个插槽…@我以为SetAffinity集是使用哪个内核?你有什么建议来改进我的线程?如果我只是创建一个新线程,它会滞后,因为一个核心上有两个线程不是那么好。。4确定你是对的。。。我是“优先权”之类的。。第一:xbox有4个处理器吗?!第二:选中此->第三:将线程优先级设置为较低?Xbox只有3个内核,其中一个为0,如果我的内存没有出现故障,则保留给控制台的操作系统,因此将关联设置为3/4处理器将是无用的。我不确定这是否是问题所在,但请尝试将其设置为1或2,或阅读有关此类内容的文档。imho,关联性太低,以至于调度程序将尝试开始操作,但会恢复,因为有更好的事情要做,具有更高的关联性。。。只有在5-10秒后,调度程序才能为您的操作找到一个插槽…@我以为SetAffinity集是使用哪个内核?你有什么建议来改进我的线程?如果我只是创建一个新线程,它会滞后,因为一个核心上有两个线程不是那么好。。4确定你是对的。。。我是“优先权”之类的。。第一:xbox有4个处理器吗?!第二:选中此->第三:将线程优先级设置为较低?Xbox只有3个内核,其中一个为0,如果我的内存没有出现故障,则保留给控制台的操作系统,因此将关联设置为3/4处理器将是无用的。我不确定这是否是问题所在,但尝试将其设置为1或2,或者阅读有关此类内容的文档。好吧,我完全按照您所说的做了,除了没有whiletrue循环,这很愚蠢。不完全是愚蠢的。创建和删除线程是一项昂贵的操作。使用我喜欢的无休止的循环;;还有一些同步原语。嗯,我确实按照你说的做了,除了没有whiletrue循环,这很愚蠢。不完全是愚蠢的。创建和删除线程是一项昂贵的操作。使用我喜欢的无休止的循环;;和一些同步原语。