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 27-11-2009
bruykari bruykari is offline
No confirmado
 
Registrado: mar 2008
Posts: 2
Poder: 0
bruykari Va por buen camino
Question ¿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.

Última edición por bruykari fecha: 27-11-2009 a las 13:05:58. Razón: Probe ponerle un gif
Responder Con Cita
  #2  
Antiguo 27-11-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola bruykari, añade esta línea en el ciclo donde estas añadiendo tus 10000 cadenas:

Código Delphi [-]
  Application.ProcessMessages;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 27-11-2009
bruykari bruykari is offline
No confirmado
 
Registrado: mar 2008
Posts: 2
Poder: 0
bruykari Va por buen camino
Thumbs up

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.

Última edición por bruykari fecha: 27-11-2009 a las 14:02:28. Razón: Lo solucione
Responder Con Cita
  #4  
Antiguo 24-02-2010
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 24-02-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 24-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por pepe2000 Ver Mensaje
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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 24-02-2010 a las 16:48:06.
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
"sincronizar" mostrar Form en Pantalla NEG1414 C++ Builder 3 22-10-2008 16:24:49
Como hacer que se vea "Si" en vez de "TRUE" en un DBGrid lu9eui C++ Builder 2 07-08-2007 04:03:13
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
"enditall" finalizar aplicacs y procesos innecesarios para por ejemplo...editar video images API de Windows 7 20-09-2004 09:55:14


La franja horaria es GMT +2. Ahora son las 18:05:03.


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