border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

Cuenta Bancaria en EEUU
  #1 (permalink)  
Antiguo 08-09-2005, 22:55:49
Gran Participación en el Foro
 
Registrado: abr 2004
Ubicación: Sevilla
Posts: 250
juanchojif Valoración +2
Predeterminado Thread y collection

Hola alguien a usado varios thread en un código. Estoy intentado tener una colleción de objetos que contiene thread pero pierdo el control de ellos.
lo hago así.
public structure nodo
public hilo as thread
public imagen as picturebox
end structure

Luego voy creando variables de tipo nodo y las agrego a un collection.
Cuando intento recuperar un nodo no consigo saber el estado del thread.
¿Alguna idea?
:smt013 :smt013
Responder Con Cita
  #2 (permalink)  
Antiguo 09-09-2005, 06:01:52
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Desconozco VB.NET, pero un Thread es una clase que se instancia y se ejecuta simultáneamente con otras de su misma clase para realizar diferentes acciones al mismo tiempo. Los hilos que tengas en funcionamiento los puedes arrancar start(); detener stop(); y si usan procedimientos críticos, éstos deben estar sincronizados. lo que no creo es que un proceso lo puedas almacenar en una estructura de datos.

Si no encuentras la solución te puedo indicar como se manipulan en JAVA o incluso en C# que será más parecido a VB.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 09-09-2005, 07:34:33
Gran Participación en el Foro
 
Registrado: abr 2004
Ubicación: Sevilla
Posts: 250
juanchojif Valoración +2
Predeterminado

Almacenar si que puedo, lo que pasa es que no se como identificar cual esta corriendo y cual no.
Ejemplo,
Tengo 10 variables de tipo nodo en el collection, cada una con un objeto de tipo thread a nothing (no los he inicializado)
Tomo el primero lo inicializo y lanzo el thread (este funciona sin problemas), pero si mientras que esta funcionando hago un bucle que repase los 10 nodos no se identificar cual esta en funcionamiento, he probado con ThreadState pero me da una excepcion en todos los casos.
Responder Con Cita
  #4 (permalink)  
Antiguo 09-09-2005, 11:48:07
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

No sé si será por la misma razón pero al menos en JAVA los objetos de una clase (Estructura en este caso), conviene ponerlos como private. Si además los insertas en una colección de datos, como pueden contener cualquier cosa, es necesario hacer un casting, es decir, poner delante de la recuperación del objeto, el tipo al que pertenece.

miNuevoNodo = (nodo)hashcollect.get(key)


Pruébalo y en todo caso si me pones el código trato de probarlo en VB.NET
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 09-09-2005, 16:07:17
Gran Participación en el Foro
 
Registrado: abr 2004
Ubicación: Sevilla
Posts: 250
juanchojif Valoración +2
Predeterminado

Lo del casting lo he probado con la instrucción ctype. Pero sigue sin funcionar, bueno seguia sin funcionar. Lo he conseguido controlar pero de una forma extrañisima y no se si me dará problemas en un futuro. Por ahora va.
Lo explico por si alguien puede explicarme que pasa:
Lo que estoy haciendo es un programa que espera la llegada de ficheros en a un directotio, en esos ficheros lo que hay es el nombre de una maquina y la referencia de una acción. Bien pues el programa debe de recojer esos ficheros leerlos y ejecutar las acciones sobre esos equipos (basicamente es recogida y envio de ficheros a equipos de una red) lo tengo configurado para que pueda lanzar 10 Hilos, cada hilo lleva asociado una imagen para que cuando se este ejecutando un hilo se muestre una imagen en rojo y cuando no se ponga en verde.
Vale...
Pues como controlo los hilos? como se cual se queda libre para volver a lanzarlo con otro comando?.
Pues pense en una coleción de objetos Nodo formados por otros dos objetos un picturebox y thread.
El problema es que cuando me llegan dos ficheros por ejemplo asigno el primer comando al primer hilo lueg tendría que hacer que otro hilo que estuviese parado ejecutase lo que me llega en el segundo fichero. He probado poniendo una variable booleana en nodo que identifique cuando esta parado un hilo, pero no funciona, he probado tambien en usar ThreadState pero me da una excepcion , aun sabiendo que se esta ejecutando, al final sabes como lo controlo????
Con la propiedad name del picture box. Mientras que el hilo se ejcuta le pongo una marca que el propio hilo quita cuando termina.
raro raro raro.
Pues eso si alguien sabe de hilos que hable ahora o calle para siempre.
Saludos.
Responder Con Cita
  #6 (permalink)  
Antiguo 09-09-2005, 17:44:39
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Como te he comentado anteriormente me extraña el hecho que lo pongas en una estructura de datos y además que generes 10 hilos estáticos, aunque no hagan nada. Te cuento la arquitectura en C#

//Primero importas los paquetes necesarios
using System;
using System Threading;

//Clase que se ejecuta como hilo independiente
class tEquipos {
public Thread thr;
//constructor
public tEquipos(string nombre) {
thr = new Thread(new ThreadStart(this.run));
thrd.Name = nombre;
//Lo arrancamos
thrd.start();
}
//Entrada al proceso
void run() {
//Aquí el código que atiende el equipo que se conecta
//cuando este código inaliza su ejecución, el hilo muere
//y su propiedad IsAlive se pone en false.
/* Dejar que otros hilos se ejecuten */
sleep(500);
}
}


En cualquier parte del código puedes implementar.

tEquipos nuevoThread = new MiThread("<equipo atendido>");

tantas veces como necesites sin que por ello sea necesario que declares un array de 10 inicialmente.

El error al consultar el estado debe sucederte porque no se está ejecutando.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #7 (permalink)  
Antiguo 09-09-2005, 18:10:41
Gran Participación en el Foro
 
Registrado: abr 2004
Ubicación: Sevilla
Posts: 250
juanchojif Valoración +2
Predeterminado

Es muy parecido a como lo he hecho en vb.net . Pero .... que pasaría si lanzas un hilo, que por ejemplo hace parpadear una imagen, y luego le preguntas con el isAlive y te da una excepción diciendo que ese objeto esta a nothing??? pero sigues viendo parpadear la imagen....
Pues eso es lo que me pasaba.
El motivo de usar una colleción es por que no se cuantos hilos voy a tener (entre otras cosas depende de lo que quiera mi jefe, y ese cambia de opinion mas gil de entrenadores) y es la mejor forma que he encontrado para evitar tener que estar redimensionando un array.
Al final ya te digo la unica forma de saber si un hilo se estaba ejecutando era poner al principio de ese run() una marca en el nombre del picturebx y al final quitarla.
No se, pero de esa forma funciona perfectamente.
Responder Con Cita
  #8 (permalink)  
Antiguo 09-09-2005, 23:05:18
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

No duso que te funcione, pero preciamente la 'enjundia' de los MultiThread es que se creen y destruyan al tiempo que se necesitan, entonces no comprendo muy bien que persistas en incluirlos en un array.... Si precisamente es lo más dinámico que existe en su concepto, incluso puedes sincronizar varios hilos para que no ejecuten simultáneamente cosas que pueden alterar la integridad de los cálculos o datos.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #9 (permalink)  
Antiguo 09-09-2005, 23:35:24
Gran Participación en el Foro
 
Registrado: abr 2004
Ubicación: Sevilla
Posts: 250
juanchojif Valoración +2
Predeterminado

Llevas razon en cuanto que podría hacerlo para ir creando los nodos conforme los necesite. (Creo que sera la segunda versión del programa). Pero si que necesito tener el maximo numero de hilos corriendo a la vez (Cuando me haga falta) ese numero lo ire ajustando dependiendo del rendimiento de la maquina.
Gracias por tu interes Acalanto.
Responder Con Cita
  #10 (permalink)  
Antiguo 11-09-2005, 22:35:03
Moderador
 
Registrado: dic 2002
Ubicación: Oviedo - Asturias
Posts: 1.251
angelescj Valoración +2
Predeterminado

Que tu estés viendo parpadear la imagen no quiere decir que no haya terminado el hilo, cosa que sí puede haber hecho aunque todavía no le "ha dado tiempo" a parar el parpadeo. Te recuerdo que los hilos entran y salen del procesador sin haber terminado las tareas pendientes, ya que se les termina "su tiempo".
Igualmente te digo lo mismo que Leonardo, yo tampoco entiendo el porqué incluirlos en una colección.

:smt004
__________________
Angeles
-------------------------------------
Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Claves en un objeto Collection Azrael_al10 Visual Basic 6.00 6 31-01-2007 10:26:08
Como cargar DropDownLi con una collection o un datareader? fvera ASP.NET 0 16-09-2006 23:40:51
Objeto Collection chlsaul Visual Basic 6.00 6 17-03-2005 14:23:04


La franja horaria es GMT. Ahora son las 20:22:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right