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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2015
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Ejecutar form en un hilo

Hola a todos.
Estoy con una aplicación en la que en el evento on show de un form realizo varias tareas de manejo de un cubo olap, accesos varios a tablas sql, actualización de tablas, etc. Es un proceso lento, tarda unos 30 segundos. Así que creé un form con un label y una imagen giff animada, el típico calculando con un circulo animado.
Tirado del foro (que me es de una ayuda inestimable) configuré el form para que se mantenga en primer plano, no tenga botones de minimizar, etc.
y en el evento on show implementé:
Código Delphi [-]
form23.show;  //.....todo el código de accesos y cálculos   form23.close;
El programa funciona bien, pero el giff animado se queda congelado. El form se crea al arrancar el programa, también probé a crearlo en tiempo de ejecución, pero el giff se sigue quedando congelado. Para comprobar que no era cuestión de un fallo del contenedor del giff asigne en el form principal un botón para mostrarlo, y entonces sí que la imagen está animada.
Tambien he probado con insertar varios Application.ProcessMessages() en el código de acceso a bases, cálculos, etc ....... y nada, congelado.
Como había leído algo de los hilos de ejecución me he planteado crear un hilo solo para ejecutar el form
He implementado el siguiente código en el form resultados (en el evento onshow) (primero presento el form de espera, hago los cálculos, y cierro el form de espera)
Código Delphi [-]
type    
  THilo = class( TThread ) 
  private protected procedure Execute; override; 
  procedure terminarlo; 
end;   
TForm14 = class(TForm)     
ADOQuery1: TADOQuery;  
DataSource1: TDataSource;     
ADOQuery2: TADOQuery; 
DataSource2: TDataSource; // siguen todos los componentes de form14, corto aquí para abreviar.
y además
Código Delphi [-]
var   
Form14: TForm14;  
pendiente,anticipos, periodificaciones:real;      
Dia, Mes, Año : Word;  
Hoy,fechamala: TDateTime;  
miaño:string;    
X,TOTEM:integer;    
pasoactual:string;  
hilo:thilo;   
implementation  
uses  currando;  // (es el form23)  {$R *.dfm}    
procedure thilo.Execute;  
begin  
  inherited;  
  Synchronize(form23.show);  
  Application.ProcessMessages();  
end;   
procedure Thilo.Terminarlo; 
begin   
  Synchronize(form23.close);    
  Terminate; 
end;
y en el evento on show
Código Delphi [-]
procedure TForm14.FormShow(Sender: TObject);
var x:integer; 
begin
  hilo := Thilo.Create(true); 
  Hilo.Priority := tpTimeCritical;   
  hilo.Resume;
  Application.ProcessMessages();
  // toda el código de acceso a bases de datos, etc 
  hilo.terminarlo(); 
  FreeAndNil( Hilo );
end; // final del procedure
El form de espera aparece, los cálculos se hacen, el form se cierra..... todo bien, pero el giff sigue congelado.
Es como si el hilo de ejecución de la presentación del form no "chupase" cpu (o al menos eso pienso),
Gracias a todos de antemano por vuestro tiempo, y disculpas si hay alguna metedura de pata grande, solo programo por afición.

Última edición por Casimiro Notevi fecha: 29-12-2015 a las 15:31:54.
Responder Con Cita
 



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
Cerrar form al terminar Hilo NEG1414 C++ Builder 3 05-03-2015 19:10:57
Problemas para acceder a componenente de un Form desde un Hilo NEG1414 C++ Builder 3 05-02-2015 11:19:10
cargar dll en un hilo y ejecutar funcion jars OOP 2 17-11-2012 14:16:37
cuando llamo ejecutar un hilo dentro del proceso del hilo no lo hace robertosc Varios 1 14-08-2007 22:11:09
ejecutar consulta sql en hilo pborges36 OOP 0 10-05-2007 18:29:32


La franja horaria es GMT +2. Ahora son las 23:27:55.


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