Threads rapidos... Demasiado rapidos

23/02/2006 - 15:38 por Bodescu | Informe spam
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que pasa
los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da tiempo a
los parametros a actualizar su valor, y me crea varios hilos iguales...

Se os ocurre alguna idea?

Gracias

Preguntas similare

Leer las respuestas

#6 Bodescu
25/02/2006 - 17:22 | Informe spam
Creo que lo pillo...

En mi caso, he de pasarle dos int, pero supongo que puedo hacerlo igual
si es un punto, que a fin de cuentas, son dos coordenadas ;)

Mil gracias, supongo que con esto me bastara.

Un saludo


Vyacheslav Popov wrote:
Hola Bodescu, aqui tienes un ejemplo de uso

//
using System.Threading;
using System.Drawing;
//

for (int x=0; x<64; x++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Metodo), new Point(x, y));
//
}
//
public void Metodo(object state)
{
Point p = (Point)state;
//
}

Espero que te sirva.
Saludos.

"Bodescu" escribió en el mensaje
news:
Gracis por la sugerencia, estoy en ello...

Puedes darme un ejemplo de implementacion?

Un saludo

Vyacheslav Popov wrote:
Hola Bodescu,
En este caso puedes utilizar el ThreadPool que permite pasar un parametro
como estado al metodo.

Espero que te sirva.

"Bodescu" escribió en el mensaje
news:
Hola Octavio, gracias por tu respuesta.

La cosa es tal que asi:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Lanzadera));
//Actualizacion de parametros
}

Si no uso la lanzadera, me pasa esto:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Mimetodo(x,y)));
//Actualizacion de parametros
}
Y me dice que esperaba un metodo...

Como me sugieres que lo implemente?

un saludo





Octavio Hernandez wrote:
Hola,

Para la sincronización de los hilos puedes utilizar el método
Thread.Join():


http://msdn.microsoft.com/library/d...nTopic.asp

Leyendo este mensaje tuyo y el anterior, me da la impresión de que
debes olvidarte de la idea de la "lanzadera" y simplemente poner el
código que tienes en ese hilo en el cuerpo del bucle dentro del que
creas los demás hilos.

Slds - Octavio


"Bodescu" escribió en el mensaje
news:OE%
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que
pasa los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da tiempo
a los parametros a actualizar su valor, y me crea varios hilos
iguales...

Se os ocurre alguna idea?

Gracias












Respuesta Responder a este mensaje
#7 Vyacheslav Popov
25/02/2006 - 17:45 | Informe spam
En cualquier caso puedes crear una estructura o clase propia, por ejemplo:

public struct LosParametros
{
int A;
int B;
public LosParametros(int a, int b)
{
A = a;
B = b;
};
}

Saludos.
"Bodescu" escribió en el mensaje
news:%
Creo que lo pillo...

En mi caso, he de pasarle dos int, pero supongo que puedo hacerlo igual si
es un punto, que a fin de cuentas, son dos coordenadas ;)

Mil gracias, supongo que con esto me bastara.

Un saludo


Vyacheslav Popov wrote:
Hola Bodescu, aqui tienes un ejemplo de uso

//
using System.Threading;
using System.Drawing;
//

for (int x=0; x<64; x++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Metodo), new Point(x,
y));
//
}
//
public void Metodo(object state)
{
Point p = (Point)state;
//
}

Espero que te sirva.
Saludos.

"Bodescu" escribió en el mensaje
news:
Gracis por la sugerencia, estoy en ello...

Puedes darme un ejemplo de implementacion?

Un saludo

Vyacheslav Popov wrote:
Hola Bodescu,
En este caso puedes utilizar el ThreadPool que permite pasar un
parametro como estado al metodo.

Espero que te sirva.

"Bodescu" escribió en el mensaje
news:
Hola Octavio, gracias por tu respuesta.

La cosa es tal que asi:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Lanzadera));
//Actualizacion de parametros
}

Si no uso la lanzadera, me pasa esto:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Mimetodo(x,y)));
//Actualizacion de parametros
}
Y me dice que esperaba un metodo...

Como me sugieres que lo implemente?

un saludo





Octavio Hernandez wrote:
Hola,

Para la sincronización de los hilos puedes utilizar el método
Thread.Join():


http://msdn.microsoft.com/library/d...nTopic.asp

Leyendo este mensaje tuyo y el anterior, me da la impresión de que
debes olvidarte de la idea de la "lanzadera" y simplemente poner el
código que tienes en ese hilo en el cuerpo del bucle dentro del que
creas los demás hilos.

Slds - Octavio


"Bodescu" escribió en el mensaje
news:OE%
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que
pasa los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da
tiempo a los parametros a actualizar su valor, y me crea varios
hilos iguales...

Se os ocurre alguna idea?

Gracias











Respuesta Responder a este mensaje
#8 Octavio Hernandez
25/02/2006 - 19:38 | Informe spam
Bodescu,

Lo que te quiería recomendar que hicieras es esto:

Thread[] Hilo1 = new Thread[65]; // 0-64
for (int x=0;x<d;x++)
{
// llamar al método de la "lanzadera" en el hilo principal
// (para qué crear un nuevo hilo si tienes que esperar hasta que
termine?)
MiMetodo(x, y);
// crear el hilo, ya teniendo el valor de 'y'
// aquí ya sigue las indicaciones de Vyacheslav sobre el hilo con un
parámetro
Hilo1[x] = new Thread(...)
Hilo1[x].Start();
}

Salu2 - Octavio



"Bodescu" escribió en el mensaje
news:
Hola Octavio, gracias por tu respuesta.

La cosa es tal que asi:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Lanzadera));
//Actualizacion de parametros
}

Si no uso la lanzadera, me pasa esto:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Mimetodo(x,y)));
//Actualizacion de parametros
}
Y me dice que esperaba un metodo...

Como me sugieres que lo implemente?

un saludo





Octavio Hernandez wrote:
Hola,

Para la sincronización de los hilos puedes utilizar el método
Thread.Join():


http://msdn.microsoft.com/library/d...nTopic.asp

Leyendo este mensaje tuyo y el anterior, me da la impresión de que debes
olvidarte de la idea de la "lanzadera" y simplemente poner el código que
tienes en ese hilo en el cuerpo del bucle dentro del que creas los demás
hilos.

Slds - Octavio


"Bodescu" escribió en el mensaje
news:OE%
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que pasa
los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da tiempo a
los parametros a actualizar su valor, y me crea varios hilos iguales...

Se os ocurre alguna idea?

Gracias



Respuesta Responder a este mensaje
#9 Bodescu
28/02/2006 - 17:57 | Informe spam
Agradeceos la ayuda, seguro que me sera util.

Por diversos motivos que no vienen a cuento, aun no lo he probado, pero
no creo tener mayores problemas con vuestras indicaciones.

Si algo falla, os lo hare saber...

un saludo

Bodescu



Octavio Hernandez wrote:
Bodescu,

Lo que te quiería recomendar que hicieras es esto:

Thread[] Hilo1 = new Thread[65]; // 0-64
for (int x=0;x<d;x++)
{
// llamar al método de la "lanzadera" en el hilo principal
// (para qué crear un nuevo hilo si tienes que esperar hasta que
termine?)
MiMetodo(x, y);
// crear el hilo, ya teniendo el valor de 'y'
// aquí ya sigue las indicaciones de Vyacheslav sobre el hilo con un
parámetro
Hilo1[x] = new Thread(...)
Hilo1[x].Start();
}

Salu2 - Octavio



"Bodescu" escribió en el mensaje
news:
Hola Octavio, gracias por tu respuesta.

La cosa es tal que asi:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Lanzadera));
//Actualizacion de parametros
}

Si no uso la lanzadera, me pasa esto:

for (int x=0;x<c;x++)
{
Tarea= new Thread(new Threadstart(Mimetodo(x,y)));
//Actualizacion de parametros
}
Y me dice que esperaba un metodo...

Como me sugieres que lo implemente?

un saludo





Octavio Hernandez wrote:
Hola,

Para la sincronización de los hilos puedes utilizar el método
Thread.Join():


http://msdn.microsoft.com/library/d...nTopic.asp

Leyendo este mensaje tuyo y el anterior, me da la impresión de que debes
olvidarte de la idea de la "lanzadera" y simplemente poner el código que
tienes en ese hilo en el cuerpo del bucle dentro del que creas los demás
hilos.

Slds - Octavio


"Bodescu" escribió en el mensaje
news:OE%
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que pasa
los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da tiempo a
los parametros a actualizar su valor, y me crea varios hilos iguales...

Se os ocurre alguna idea?

Gracias







Respuesta Responder a este mensaje
#10 Francisco Garrido (fcogarrido
24/05/2006 - 10:37 | Informe spam
Hola Octavio.

Yo tengo algo parecido (array de threads) pero no funciona bien.
En una clase tengo definida la variable del array de threads y luego, dentro
de un bucle, controlado por una variable que voy incrementando, voy creando
threads (llama a una función que está dentro de esta misma clase).
Aquí tienes el código:

public class DescomprimirZIP
{
...
Thread[] ArrayThreadsCarpetas = new Thread[50];
...

public void SubirDocumentoYDescomprimir()
{
...
int indiceArrayThread = 0;
for (int index=1;index<arrayCarpetas.Length;++index)
{
...
ArrayThreadsCarpetas[indiceArrayThread] = new Thread(new
ThreadStart(subirCarpetaDescomprimida));
ArrayThreadsCarpetas[indiceArrayThread].Start();
indiceArrayThread = indiceArrayThread + 1;
}
}

public static void subirCarpetaDescomprimida()
{
...
...
}
}

"Octavio Hernandez" wrote:

Bodescu,

Lo que te quiería recomendar que hicieras es esto:

Thread[] Hilo1 = new Thread[65]; // 0-64
for (int x=0;x<d;x++)
{
// llamar al método de la "lanzadera" en el hilo principal
// (para qué crear un nuevo hilo si tienes que esperar hasta que
termine?)
MiMetodo(x, y);
// crear el hilo, ya teniendo el valor de 'y'
// aquí ya sigue las indicaciones de Vyacheslav sobre el hilo con un
parámetro
Hilo1[x] = new Thread(...)
Hilo1[x].Start();
}

Salu2 - Octavio



"Bodescu" escribió en el mensaje
news:
> Hola Octavio, gracias por tu respuesta.
>
> La cosa es tal que asi:
>
> for (int x=0;x<c;x++)
> {
> Tarea= new Thread(new Threadstart(Lanzadera));
> //Actualizacion de parametros
> }
>
> Si no uso la lanzadera, me pasa esto:
>
> for (int x=0;x<c;x++)
> {
> Tarea= new Thread(new Threadstart(Mimetodo(x,y)));
> //Actualizacion de parametros
> }
> Y me dice que esperaba un metodo...
>
> Como me sugieres que lo implemente?
>
> un saludo
>
>
>
>
>
> Octavio Hernandez wrote:
>> Hola,
>>
>> Para la sincronización de los hilos puedes utilizar el método
>> Thread.Join():
>>
>>
>> http://msdn.microsoft.com/library/d...nTopic.asp
>>
>> Leyendo este mensaje tuyo y el anterior, me da la impresión de que debes
>> olvidarte de la idea de la "lanzadera" y simplemente poner el código que
>> tienes en ese hilo en el cuerpo del bucle dentro del que creas los demás
>> hilos.
>>
>> Slds - Octavio
>>
>>
>> "Bodescu" escribió en el mensaje
>> news:OE%
>>> Hola a la comunidad:
>>>
>>> Mi problema es conseguir que se coordinen los threads:
>>>
>>> Utilizo un thread lanzadera, para llamar a un metodo al que hay que
>>> pasarle parametros. Inmediatamente despues de lanzado el metodo que pasa
>>> los params, estos deben actualizar su valor.
>>>
>>> El caso es que la creacion de los hilos es tan rapida que no da tiempo a
>>> los parametros a actualizar su valor, y me crea varios hilos iguales...
>>>
>>> Se os ocurre alguna idea?
>>>
>>> Gracias
>>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida