![]() |
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 |
Has probado Application.ProcessMessages o similar en el bucle donde consume mucha CPU??
|
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:
¿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 |
Estoy de acuerdo con Bicho, incluso deberías plantearlo de otra forma si quieres actualizar el mensaje de TWaitForm.
Hay otras formas de plantearlo, depende de como quieras hacerlo. Saludos |
no has pensado en usar Threads? es un poco más complicado pero está hecho para este tipo de situaciones
|
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. |
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. |
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. |
La franja horaria es GMT +2. Ahora son las 23:42:16. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi