Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2014
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 21
Rockin Va por buen camino
Varios Hilos

Buenas a todos, primero perdón porque no se si va en este apartado del foro mi pregunta.

Después de varios años porgramando, voy a empezar a usar Hilos de ejecución, ya he visto varias cosas en los trucos, foros, blogs y demás. Cuando es un hilo lo veo claro, pero tengo que hacer algo un poco más complejo.
Actualmente tengo una aplicación que calcula los tipos de ventas de unos agentes, sus horas, sus ratios, etc....
Son varias consultas, lo que hago actualmente es hacer la primera consulta StringGrid, luego la segunda, etc... al final cada resultado de las consultas se guarda en su celda de un StringGrid y añado una fila, y así con todos los agentes.

Me gustaría lanzar las consultas en varios hilos para acelerar el proceso, pero me surge la duda de como controlar que no escriba ni incremente la fila hasta que todas las consultas hayan terminado, son unas 20 consultas, cada una de su padre y de su madre unas a Firebird, otras a SQL en fin un lío.

A ver si de esta manera lo veis más claro
Código Delphi [-]
for i:= to num_agente do
begin

ventas:= CalcularVentas(nombre_agente);
horas:= CalcularHoras(nombre_agente);
ratios_venta:= CalcularRatioVenta(nombre_agente);

StringGrid[0,i]:= ventas;
StringGrid[1,i]:= horas;
StringGrid[2,i]:= ratios_venta;
StringGrid.rowcount := StringGrid.rowcount + 1;

end;

Querría lanzar las distintas consultas y que cuando estén todas finalizadas me rellene el grid y pase al siguiente agente.

No se si me he explicado bien, es algo lioso.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 29-01-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se me ocurre que podrías crear una lista de Objetos (TObjectList) e ir guardando referencia de los threads que lanzas. Yo lo hago a menudo para tenerlos controlados.
Almacena en cada thread el resultado.
A medida que vayan finalizando no los destruyas (free) y controla cuantos todos ellos hayan finalizado.
Cuando estén todos acabados (sin liberar), recórrelos y guardas los datos en el StringGrid.
Luego ya podrás destruirlos.
Lo único es que durante ese tiempo estarás consumiendo recursos.

Otra opción sería crear una lista intermedia para ir almacenando los resultados a medida que los threads acaben. En este caso los puedes liberar.
Cuando estén todos finalizados pasa los datos de esa lista intermedia al stringrid.

Recuerda que si vas a realizar conexiones a BD, debes crear una conexión por thread. Eso en algunos casos, (si vas a lanzar 20) te puede traer problemas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 29-01-2014
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 21
Rockin Va por buen camino
Gracias por la rápida respuesta, probaré así.

Estoy usando XE5 con servidor capa intermedia DataSnap, crearé un ClientDataSet por consultar a ver que pasa.

Os digo como me va.

Saludos
Responder Con Cita
Respuesta



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
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
hilos !! ?? lmpadron C++ Builder 2 14-03-2012 04:41:31
Varios hilos atacando a Firebird mcs Conexión con bases de datos 7 09-07-2010 14:26:31
Ayuda relaciones de varios a varios TQueries j_flores3000 SQL 7 22-11-2008 21:43:40
Aplicacion con varios Hilos de Ejecución samantha jones Varios 1 02-03-2005 17:27:24
Hilos con COM urush30 Varios 0 21-09-2004 10:07:37


La franja horaria es GMT +2. Ahora son las 00:20:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi