Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como evito que el Form principal se "cuelgue" con procesos? (https://www.clubdelphi.com/foros/showthread.php?t=65202)

bruykari 27-11-2009 12:17:54

¿Como evito que el Form principal se "cuelgue" con procesos?
 
Hola gente, que tal?
Soy nuevo y no-nuevo aca, siempre veo tutoriales y explicaciones, que me solucionan la vida.
Pero tengo un problema en delphi y no encontre solucion todavia. Busque a mano, busque con el buscador, busque desde google pero no lo encuentro.
Comento mi problema.
En varios programas que utilizan Strings y TStringList, me pasa que cuando un proceso agrega muchas (muchas digamos unas 10000) cadenas, el Form principal se me queda frizado. Se entiende? No tenes control sobre el Form principal, no podes hacerle nada. Ni cerrarlo, es cuelga mal.
Estuve buscando como hacer que esos procedimientos trabajen en segundo plano, pero no encontre especificamente eso.
Espero que se entienda, sino me expreso mejor.
Tambien espero que este en la seccion correcta, porque las otras no me parecian correctas.
Y si esto ya se respondio, por favor denme un link al hilo.
Saludos!

PD: Ya puse un Gif y cuando llamo al proceso que me friza el Form principal, se vuele todo invisible excepto ese gif, pero tambien se me friza el gif.

Caro 27-11-2009 13:40:53

Hola bruykari, añade esta línea en el ciclo donde estas añadiendo tus 10000 cadenas:

Código Delphi [-]
  Application.ProcessMessages;

Saluditos

bruykari 27-11-2009 13:53:43

Exactamente eso estaba necesitando Caro!!!!!
Mil millones de gracias!!!!!!!!
Esto me tiene loco hace 2 horas ya!!!!


Listo!!! Lo que habia preguntado recien, antes de estar editandolo ahora, ya lo solucione yo limpiando el codigo.
De nuevo mil gracias Caro!!!
Saludos!!!!!!!!!!!!

PD: MODs, el tema termino, cierrenlo si quieren.

pepe2000 24-02-2010 16:22:04

Funciona como un hilo?
 
Buenas,
Que solución tan simple y elegante, pero quisiera saber si esto funciona igual que un hilo de ejecución (Tthread), y si se puede colocar un control para "cortar" el bucle.
Felicidades.

Ñuño Martínez 24-02-2010 16:32:08

No, no tiene nada que ver con los hilos (TThread). Es más, creo que no es buena idea llamar a "Application.ProcessMessages" desde un hilo que no sea el principal. Desconozco si el objeto Application es "de hilo seguro" (creo recordar que con Delphi 6 no lo hera, no sé si ahora sí lo es).

En el caso de múltiples hilos las soluciones han de venir por otro lado. Por ejemplo, que todas las actualizaciones de formularios y ventanas se hagan desde el hilo principal y que en los hilos "hijo" sólo se haga procesamiento de datos.

rgstuamigo 24-02-2010 16:39:45

Cita:

Empezado por pepe2000 (Mensaje 354894)
Buenas,
Que solución tan simple y elegante, pero quisiera saber si esto funciona igual que un hilo de ejecución (Tthread), y si se puede colocar un control para "cortar" el bucle.
Felicidades.

La instruccion "Application.ProcessMessages;" lo que hace es interrumpir la ejecución de la aplicación para procesar los mensajes de la cola de Windows y permitir que los controles se repinten. Para más información ver la ayuda de Delphi, presionado la tecla F1.;).
Sobre el asunto del Hilo(Thread) creo que deberías ser mas específico y detallista de lo que pretendes hacer, en todo caso si el tema es diferente a éste, pues te aconsejo que hábras un nuevo tema(nuevo hilo) y posties ahí tus dudas, ésto para tener un buen orden y fascilitar las búsqueda por temas.;).
Saludos...:)


La franja horaria es GMT +2. Ahora son las 20:37:49.

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