Foros del Web » Programación para mayores de 30 ;) » .NET »

Threading: wn un while se me sale de rango

Estas en el tema de Threading: wn un while se me sale de rango en el foro de .NET en Foros del Web. En una clase tengo dos métodos, que son los siguientes: public void metodo1() { int indice = 0; while(indice<misFicheros.Length) { ThreadStart t = delegate { ...
  #1 (permalink)  
Antiguo 12/11/2010, 09:14
 
Fecha de Ingreso: octubre-2006
Mensajes: 53
Antigüedad: 17 años, 5 meses
Puntos: 0
Threading: wn un while se me sale de rango

En una clase tengo dos métodos, que son los siguientes:

public void metodo1()
{
int indice = 0;
while(indice<misFicheros.Length)
{

ThreadStart t = delegate { metodo2(misFicheros[indice]); };
new Thread(t).Start();
indice++;
}
}



private void metodo2(string ficheros)
{
//codigo del procesamiento de ficheros
}


El método2 hace unas operaciones sobre el fichero pasado por parámetro.

Cuando ejecuto el programa, entra en el while del método1, y ejecuta un hilo por cada una de las iteraciones del bucle, ya que es lo que quiero, que se haga en paralelo.

Sin embargo, la variable indice llega a tener el valor de la longitud de misFicheros, por lo que en tiempo de ejecución me da un error de que se sobrepasa la longitudo del array.

Por la condición que tengo puesta en el while, no entiendo por qué llega a pasar, ya que he puesto un menor estricto, no un menor igual. Además, cuando se me para la ejecución, si miro el valor que tiene la variable indice, veo realmente que tiene el valor que debería hacer que no entrara de nuevo en el while, pero que sin embargo entra.

Me gustaría saber por qué ocurre esto, ya que la variable indice solo la incremento en el while, no en ningún otro sitio, de hecho es una variable local de metodo1.

Si ese mismo while lo ejecuto pero sin hacer uso del threading, llamando normalmente a metodo2, ese error de sobrepasar el rango del array no me ocurre, por lo que supongo que el problema es por el uso de hilos, pero no sé por qué.

También he probado con un for en lugar de con un while, pero sigue pasando lo mismo, la variable indice se sigue incrementando más allá de la condición del bucle.

También he probado a intentar definir la variable indice como variable de clase, poniéndola el modificador volatile, ya que por lo que he leído que usando hilos a veces no se lee el valor más reciente de la variable, pero sigue pasando lo mismo. En parte lo esperaba, porque esto es si la variable es modificada por alguno de los hilos, pero no es el caso, solo se modifica en el while del método principal.

¿Alguien sabe cual puede ser la solución?



Muchas gracias.
Daimroc.
  #2 (permalink)  
Antiguo 12/11/2010, 09:22
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: Threading: wn un while se me sale de rango

Lo que se me ocurre es que en algun lugar estas modificando la colección misFicheros.
  #3 (permalink)  
Antiguo 12/11/2010, 10:17
 
Fecha de Ingreso: octubre-2006
Mensajes: 53
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Threading: wn un while se me sale de rango

No, misFicheros no lo modifico en ningún sitio, es una variable de clase que se establece en el constructor en el momento de instanciarla.

Una vez establecida, se llama a metodo1, el cual inicia el bucle llamando a metodo2 mediante el thread. No se modifica en ningún momento. Por eso es que me extraña que se salga fuera del rango.



Gracias.
Daimroc.

Etiquetas: rango, sale
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:48.