Problema con Thread.SetAffinity y Threading a través de XNA en Xbox 360
Frecuentes
Visto 253 veces
2
Así que desarrollé un sistema de detección de colisiones muy eficiente, pero el problema es que todavía no puede ejecutarse en el subproceso principal porque es demasiado lento.
Intenté configurar algunos subprocesos y, si el subproceso finaliza, se crea otro subproceso.
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;
}
Ahora noté un comportamiento extraño al depurar. Cuando llamé a Thread.SetAffinity, saltó una y otra vez una o dos veces antes de comenzar a verificar las colisiones.
Y ahora mis colisiones se retrasan entre 5 y 10 segundos...
Si alguien tiene una idea, por favor ingrese algo aquí.
1 Respuestas
1
La XBOX 360 tiene 3 núcleos con 2 subprocesos de hardware por núcleo, lo que produce un total de 6 subprocesos de hardware. Los subprocesos 0 y 2 están reservados por XNA Framework, dejando 1, 3, 4 y 5 para que usted los use.
En cuanto a la pregunta, ¿por qué está creando un nuevo hilo después de verificar si hay colisiones, para hacer exactamente lo mismo nuevamente? Si necesita repetir la verificación de colisiones en un hilo, simplemente colóquelo dentro de un while(true)
bucle para mantenerlo en marcha.
Respondido el 05 de Septiembre de 12 a las 02:09
Bueno, hice exactamente lo que dijiste, excepto sin el bucle while (true), que es una tontería. - usuario1146887
No es exactamente tonto. Crear y derribar hilos es una operación costosa. Use un bucle sin fin (prefiero for(;;)) y algunas primitivas de sincronización. - Simon
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xna xbox360 or haz tu propia pregunta.
En mi humilde opinión, la afinidad es tan baja que el programador "intentará comenzar la acción" pero lo revierte, porque hay "mejores cosas que hacer" (con una mayor afinidad) ... solo después de 5-10 segundos el programador encuentra un tragamonedas para tu acción... - TheHe
@TheHe Pensé que el conjunto de SetAffinity es qué núcleo usar. ¿Qué sugieres para mejorar mi enhebrado? Si solo creo un nuevo hilo, se retrasa, porque 2 hilos en 1 núcleo no es tan bueno. - user1146887
aah.. seguro que tienes razón... era @priorities y algo... primero: ¡¿la xbox tiene 4 procesadores?! segundo: mira esto -> msdn.microsoft.com/en-us/library/windows/desktop/… tercero: ¿establecer la prioridad del subproceso más baja? - TheHe
La Xbox solo tiene 3 núcleos, y uno de ellos (0, si mi memoria no falla) está reservado para el sistema operativo de la consola, por lo que establecer la afinidad en 3 (cuarto procesador) sería inútil. No estoy seguro de que ese sea el problema, pero intente configurarlo en 1 o 2, o lea la documentación sobre este tipo de cosas. - Elideb