Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/11/2011, 09:30
Avatar de Porlachucha
Porlachucha
 
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 16 años
Puntos: 5
Threads ejecucion simultanea

Hola foro

tengo la siguiente duda, que no he podido resolver a ver si alguno de ustedes tiene una idea.

tengo un proceso que recibe parametros (de varios tipos) y que debe ser ejecutado varias veces en forma ciclica durante el dia.
para esto, se desarrollo un servicio windows que corre en un server.

el prococeso demora alrededor de 2 horas en ejecutarse, ya que es una gran cantidad de data que se analiza y transforma.
el proceso tambien parte si iy solo si existen ciertas condiciones (archivos puestos en una ubicacion por otros servicios, ect)

la dificultad radica en la ejecucion, ya que para optimizar el tiempo y aprovechar los multiples nucleos de la maquina (4) se requiere que estos procesos sean ejecutados en forma simultanea en hilos distintos

basicamente la ejecucion esta de la siguiente forma

Código:
            // crea un ciclo de ejecucion se acuerdo a las interfaces a procesar 
            List<String> lsInterfacesProcesables = cConfigura.lsObtieneListaInterfaces(true);

            // crea instancias
            foreach (String sInterface in lsInterfacesProcesables)
            {
                Thread t1 = new Thread(() => EjecutarInterface(sInterface, cConfigura, dtFechaProceso, cLog));
                t1.Start();
            }
los parametros son:
sInterface : tipo string, identifica al producto
cConfigura: un objeto que contiene toda la configuracion necesaria para el procesamiento del producto
dtFechaProceso: tipo DateTime, indica la fecha de procesamiento
cLog: objeto que contendra el log de ejecucion


lo que hice fue crear una expresion lambda que pasara como parametros al objeto instanciado que ejecuta el proceso.

los problemas de esta forma de ejecucion son 2.

1.- necesito instanciar multiples veces el mismo objeto, pasandole parametros distintos, y esto requiero hjacerelo en hilos separados.
2.- necesito saber el estado de ejecucion de dichos procesos, para que una vez terminados pueda volver a lanzarlos. si es que ya ha terminado la ejecucion del proceso, y en caso contrario esperar una cantida determinada de tiempo para preguntar nuevamente por el estado.

espero que haber sido claro en el planteamiento de mi problema
cualquier comentariosera de mucha ayuda

gracias
plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...