Título: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 18 Febrero 2010, 03:01 am Hola gente... estoy teniendo problemas para pasar por referencia, una variable a un thread..
Esto es posible?? porque veo que al construir un nuevo hilo, solamente puedo poner un ByVal x as XXXX como parametros... El tema, es que necesito descargar una cadena, de manera asincronica.. con un web client... del modo: dim p as new webcient p.downloadstringasync(ACA EL URI) Eso me descarga perfectamente el codigo fuente de una web si le paso un link.. pero, para tomar el codigo, tengo que tomarlo desde el evento downloadstrngasynccompleted... y estoy trabajando con HILOS.. cada hilo tiene su weblcient.. así que no tengo idea de como tomar ese evento... Por lo que, me propuse que, el hilo, a la hora de descargar ese codigo fuente, cree un hilo, y le mando un link y una variable para que guarde en la variable, el codigo juente descargado NO ASINCRONICAMENTE del link que le pasé..... Pero... no puedo.. porque esa variable, donde tiene que estar el codigo fuente, no puedo pasarle la referencia para que le meta el codigo... me entienden??? Un hilo, crearía otro HILO.. El 1º hilo, ejecuta el 2º, que lo que hará el 2º, es guardar en la variable CODIGO, el codigo fuente descargado de manera NO ASINCRONICA... Pero al no poderle pasar la cariable CODIGO al 2º hilo.. no puedo hacer todo ésto.... Alguien tiene una solucion? Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: MANULOMM en 18 Febrero 2010, 04:49 am por ser una variable por referencia es muy factible que dos hilos intentasen acceder al mismo tiempo al mismo campo de memoria, mira el tema de interbloqueos.
Atentamente, Juan Manuel Lombana Medellín - Colombia Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 18 Febrero 2010, 04:52 am WTF?
Tio... las leido lo que puse? o simplemente leiste el titulo y formulaste una supuesta respuesta? Reformulo la respuesta: Como hago para pasarle una variable por referencia a un hilo? (en realidad, necesito pasar una por referencia y otra sin referencia) Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: MANULOMM en 18 Febrero 2010, 22:09 pm haber, muestrame un poco de tu fuente.
Con lo de interbloqueos me referia a que cuandos dos o mas hilos intentan acceder a la misma porcion de memoria chocan, hay algunas tecnicas para evitar que esto pase pues la aplicacion se bloquearia. Atentamente, Juan Manuel Lombana Medellín - Colombia Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 18 Febrero 2010, 22:22 pm dim p as new thread(address of Descarga)
p.start(LINK, CODIGO) public sub Descarga(byref link as String, byref codigo as String) end sub Todo eso, da error en el .START... porque no se puede enviar una varible por referencia... Sabes como se puede hacer para enviar variables por referencias a hilos? Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: 43H4FH44H45H4CH49H56H45H en 19 Febrero 2010, 04:47 am Para hacerlo sencillo puedes declarar 2 variables globales
Código
las cuales actualizas antes antes de Código y las utilizas dentro de Código
Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: elmaro en 19 Febrero 2010, 15:08 pm dim p as new thread(address of Descarga) p.start(LINK, CODIGO) public sub Descarga(byref link as String, byref codigo as String) end sub Todo eso, da error en el .START... porque no se puede enviar una varible por referencia... Sabes como se puede hacer para enviar variables por referencias a hilos? Claro, si quieres pasar parametros asi solo puedes pasar uno solo. Es como en el BackGroundWorker: Código
Como es del tipo Object puedes mandar un Array con los datos que necesites Código
Código
Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 19 Febrero 2010, 17:34 pm Para hacerlo sencillo puedes declarar 2 variables globales No puedo hacer eso, porque en realidad tengo muchos hilos, y a cada uno le tengo que pasar un dato especial. Y la cantidad de hilos es dinamica, así que tampoco podria crear muchas variables globales.Código
las cuales actualizas antes antes de Código y las utilizas dentro de Código
dim p as new thread(address of Descarga) p.start(LINK, CODIGO) public sub Descarga(byref link as String, byref codigo as String) end sub Todo eso, da error en el .START... porque no se puede enviar una varible por referencia... Sabes como se puede hacer para enviar variables por referencias a hilos? Claro, si quieres pasar parametros asi solo puedes pasar uno solo. Es como en el BackGroundWorker: Código
Como es del tipo Object puedes mandar un Array con los datos que necesites Código
Código
Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: elmaro en 19 Febrero 2010, 19:05 pm Tienes razón. Pero como vi el código ese que tenia mal la sintaxis pensé que así te serviría.
Voy a ver si se me ocurre algo. Saludos Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: MANULOMM en 19 Febrero 2010, 20:28 pm Que va ha pasar cuando Dos o mas hilos intenten acceder a la misma porcion de memoria (la misma referencia)?
Simplemente se pelearan por el recurso y la aplicacion morira... Si fuese una variable global o estatica pasaria lo mismo. busca sobre los interbloqueos en hilos. Atentamente, Juan Manuel Lombana Medellín - Colombia Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: elmaro en 19 Febrero 2010, 20:45 pm Que va ha pasar cuando Dos o mas hilos intenten acceder a la misma porcion de memoria (la misma referencia)? Simplemente se pelearan por el recurso y la aplicacion morira... Si fuese una variable global o estatica pasaria lo mismo. busca sobre los interbloqueos en hilos. Atentamente, Juan Manuel Lombana Medellín - Colombia Sobre eso, aca tenes una info y te va a ahorrar bastantes dolores de cabeza http://msdn.microsoft.com/es-es/library/3a86s51t%28VS.80%29.aspx (Aunque todavia falta saber como pasar valores por referencia jeje) Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 19 Febrero 2010, 20:47 pm Tio.. has dicho siempre lo mismo.
NINGUN HILO MAS INTENTARÁ ACCEDER A ESA VARIABLE!!!.. Porque me la haces repetir tantas veces MANULON? Y ya se utilizar el Sinklock. Un Hilo, ejecutará OTRO HILO, y le pasará una variable.. éste hilo tiene que procesarla (reemplazarle unas letras por otras) y terminar. luego el otro sigue haciendo lo que quiere cone sa varible.. Porque sigues diciendo eso de INTERBLOQUEOS TIO?!?!?!?!?!?!!!!!!!!!!!!!!! Me pones los pelos de punta!!!! Ya lo has dicho 3 veces!!!..... Sabes como pasar una variable por referencia? SI O NO?! Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: elmaro en 19 Febrero 2010, 21:21 pm Podes poner código mas completo y así puedo entender mas de que se trata. Estuve buscando y no encontré absolutamente nada. Lo mas parecido que encontré es usar variables globales(que creo que es lo que hay que hacer)
Saludos Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: Skeletron en 19 Febrero 2010, 23:27 pm Que ponga el codigo fuente?......................................................................................
Si tuviese el codigo fuente, ya estaria solucionado... Todo el demas codigo que tengo en el proyecto, no tiene nada que ver.. y solamente los confundirá mas (y son mas de 700 lineas).... No puede ser que no exista manera de pasar una variable por referencia... Aunque, estuve pensando lo siguiente: Si el hilo que voy a crear, en vez de ser un metodo, es una CLASE diferente, entonces, mediante metodos SET Y GET puedo cambiar ese valor. y utilizarlo como varible global para la propia clase del hilo... Se entiende? Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: seba123neo en 20 Febrero 2010, 02:51 am http://www.yoda.arachsys.com/csharp/threads/parameters.shtml (http://www.yoda.arachsys.com/csharp/threads/parameters.shtml)
Título: Re: Problemas con Variable por Referencia a un HILO Publicado por: elmaro en 20 Febrero 2010, 06:07 am Bueno espero tener tu solución.
Me puse a revisar el ThreadStart pero vi que no le podía pasar parámetros y vi el post de seba y.... ParameterizedThreadStart cha channn ;-) Código
Y acá la clase a la que le pasas el valor: Código
Quedaría adaptarlo, pero creo que esta bien. Saludos! |