Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2007
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
Crear aviso "Espere unos minutos" durante operacion con mucha carga de CPU . AYUDA

Bien, intentare ser breve.

En mi aplicacion, tengo unos formularios para realizar consultas, las cuales demoran normalmente entre 10 y 15 segundos en el mejor de los casos, pero pueden llegar a demorar un 30 segundos.

La cuestion es que se me ocurrio poner una pantalla ke fuese algo asi como lo siguiente




y lo llamo con el siguiente codigo


Código Delphi [-]

with TfrmWaitForm.create do
try
show;
crearVentana(TfrmInformeCarterosTodosPendientes); //Esta llamada es la que demora..
finally
close;
free;
end;






El formulario se muestra (el de espera) pero no se actualiza, eso debe ser porque la llamada crearVentana(TfrmInformeCarterosTodosPendientes); utiliza mucha CPU y es la que demora.

He probado usando timers para redibujar el formulario de espera, he probado con hilos, y nada, no se como hacer para ke el formulario de espera se vea y dibuje a tiempo ke la consulta SQL se ejcuta.


Lo que obtengo es un cuadro plomo (donde se deberia ver el formulario de espera).

El formulario de espera tiene un jvwaitgradient que se mueve de lado, por lo que el formulario debe redibujarse lo suficientemente rapido como para notar la animacion .

Espero algun guru de delphi pueda ayudarme.

Atte. Gracias
Responder Con Cita
  #2  
Antiguo 15-01-2007
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
Has probado Application.ProcessMessages o similar en el bucle donde consume mucha CPU??
Responder Con Cita
  #3  
Antiguo 15-01-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola, ya tambien abogo por el Application.ProcessMessages sino lo has usado ya.

Pero hay algo que me intriga, no se si es cuestión de la nomenclatura que usas o que, es lo siguiente:

Tienes un formulario que realiza las consultas y luego tienes un form que hace crea una ventana de espera, pero luego tienes esto:

Código Delphi [-]
with TfrmWaitForm.create do
  try
    show;
    crearVentana(TfrmInformeCarterosTodosPendientes); //Esta llamada es la que demora..
  finally
    close;
  free;
end;

¿Creas el Form llamado TfrmWaitForm, y luego el crea las consultas?
De todos modos quizá deberías poner parte del código de la función CrearVentana y la función que realiza las consultas y supuestamente actualizas el form de espera, para ver donde falla.

Saludos
Responder Con Cita
  #4  
Antiguo 15-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Estoy de acuerdo con Bicho, incluso deberías plantearlo de otra forma si quieres actualizar el mensaje de TWaitForm.

Código Delphi [-]

procedure TfrmInformeCarterosTodosPendientes.Create(....);
var F:TWaitForm;
begin

  F := TWaitForm.Create(self);
  try 
     for i:= 0 to dos millones do
     begin
       F.Label1.Caption := 'Quedan '+ intTostr(Reg)+ ' registros';
       F.Update; // ordenamos que se pinte
       Application.ProcessMessages; // damos un respiro para que se pinte
     end;
  finally
     FreeAndnil(F);
  end;
end;

Hay otras formas de plantearlo, depende de como quieras hacerlo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 15-01-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
no has pensado en usar Threads? es un poco más complicado pero está hecho para este tipo de situaciones
__________________
self.free;
Responder Con Cita
  #6  
Antiguo 15-01-2007
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

¿ No te funciona una TStatusBar ?

La puedes tener oculta, hacerla visible antes del proceso con el texto que desees en la propiedad Simple Text, y ocualtarla al finalizar.

Un saludo.
Responder Con Cita
  #7  
Antiguo 18-01-2007
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
ya he probado con hilos pero no con Application.ProcessMessages, como no tenia bucles (puesto que es una consulta sql lo que usa mucho cpu), pero en fin, creo que me he orientado algo mas, por lo que intentare con el aplication.processmessages y les cuento como va.

La cuestion es que cuando el formulario que contiene y muestra los resultados de la consulta, debe enviar algun tipo de mensaje al formulario tWaitForm para detener el bucle lo redibujara.

Gracias por su ayuda.
Responder Con Cita
  #8  
Antiguo 18-01-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Yo lo resolvi de forma simple pero atractiva al usuario. Como no puedes meter código dentro del query para ir actualizando la unica opcion son los threads...pero es mucho problema solo para algo "cosmético"...

Lo que hice fue:
Hago una ventana con opcion de que se quede "siempre encima" en ese form le pongo un TAnimate con alguna de las animaciones que ya trae por defecto.
En el codigo justo antes de abrir el query creo el form, cambio la propiedad Active del TAnimate a true y muestro el form.
Ejecuto el query....(windows se encarga de estar actualizando el form)
al terminar el query, destruyo el form creado
y listo

Ya siendo mas complicado puedes crear tu propio AVI para mostrar en lugar de los que ya trae.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
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
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16
"Unable to complete..." La conexion se pierde durante la ejecución ESA Firebird e Interbase 2 24-03-2004 14:09:49


La franja horaria es GMT +2. Ahora son las 03:01:51.


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