FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema: Hilo No ejecuta Procedimiento de su formulario.
Buenos dias, es la primera ves que posteo aqui ya que hace poco eh empezado a usar delphi y la verdad esta comunicadad me ha salvado mucho al vida.
Bueno, resulta que me he topado con el siguiente problema. Tengo un proyecto en delphi el cual tengo un formulario de tipo MDIForm, el cual abro una ventana llamada FrmAuxialiar de tipo medichild (hija del otro formulario). Dentro de esta ventana hija tengo creado un hilo, lo que quiero hacer es ejecutar dentro de este hilo un procedimiento declarado dentro de mi FrmAuxiliar, el problema es que cuando hago el excute, no me toma ese procedimiento, no lo reconoce, es como si el hilo no supiera donde se encuentra declarado o parado por asi decirlo. Me gustaria saber uan forma de poder llamar a estos procedimientos dentro de mi hilo, para asi poder hacer esta multitarea,les muestro el codigo. Como veran, cuando hagvo el execute, me deberia de mostrar un panel y un circularbar, pero no lo hace. Desde ya muchas gracias y espero que me brinde una pequeña ayuda. Saludos!! Última edición por Casimiro Notevi fecha: 09-07-2012 a las 20:17:43. Razón: Cambiar [cita] por [delphi] |
#2
|
||||
|
||||
Estudia el metodo Synchronize en la ayuda de delphi.
Saludos. |
#3
|
|||
|
|||
Muchas gracias por tu respuesta, ya supe cual fue el error, ahorra miduda es al siguiente, me gustaria saber que tanta versatibilidad tiene un hilo para correr en segundo plano un procedimiento que no es propio de el, pro ejemplo.
Estoy forzando a un bucle infinito, y quiero ver si se respeta la concurrencia, pero al hacer esto se me traba la pantalla. Me gustaria saber el por que, y si hay alguna manera que el procedimiento "Mostrarcargando" se pueda correr paralelamente sin definirlo dentro del hilo. Muchas gracias!!!!! Última edición por Casimiro Notevi fecha: 10-07-2012 a las 11:01:13. Razón: Cambiar [quote] por [delphi] !!! |
#4
|
||||
|
||||
No olvides poner las etiquetas de código para que éste sea legible.
Lo que bloquea tu APP es FrmAuxialiar pues éste bloquea los mensajes de la App. Mira esto:
Este ejemplo es un tanto absurdo pues el bucle del thread llama repetidamente a un método de un formulario que presenta un bucle infinito con lo que el bucle del Thread se ejecuta sólo una vez... El método Execute del thread no tiene porqué tener un bucle, en ese caso termina cuando termine Exectue. Tu decides lo que tiene que hacer. Saludos. Última edición por escafandra fecha: 10-07-2012 a las 09:13:10. |
#5
|
|||
|
|||
Buenos dias, Escafranda mcuhas gracias por aclararmelas varias dudas con tu comentario, ahora me gustaria saber las dos cosas siguientes si eres tan amable:
1- Un hilo termina cuando termina de ejectar el execute?, o cuando ejecuto el terminate? 2- El objetivo mio era que el codigo del Frmuxiliar.mostrarcargando se corriera en segundo plano de manera que no haga trabar la ventana, perocomo este es propio del formulario no se si habra alguna forma de hacer eso, de llamar ese procedimiento y se ejecute en segundo plano sin que me haga trabar la pantalla. Espero su pronta respuesta y muchas gracias!! |
#6
|
||||
|
||||
Un hilo termina cuando termina su bucle principal. Si miras el ejempo que te puse, ya no se traba al añadir Application.ProcessMessages;
Si no quieres que aparezca ningún formulario, creo que es mas lógico que no uses uno sino que tu función pertenezca al thread. Saludos. |
#7
|
||||
|
||||
Cita:
Ahora lo que tienes que ver es que es lo que quieres que tu código haga. Saludos. |
#8
|
||||
|
||||
Una pregunta: ¿Pará qué utilizas un segundo hilo sólo para mostrar un panel? Mostrar un panel toma un par de milisegundos. Un tiempo invisible al usuario. Si mostrar el panel es el único propósito del hilo, te estás complicando la vida.
Si hicieras cálculos complicados que toman más de un segundo en procesarse, un hilo independiente sería una buena idea. Pero en este caso no le encuentro el sentido. Aparte, a cómo lo estás haciendo ahora, estás introduciendo bugs en tu aplicación. En tu código veo líneas propicias a EAccessViolation. |
#9
|
||||
|
||||
Yo creo que hasta ahora son meras pruebas de funcionamiento. El propósito final no está claro...
Saludos. |
#10
|
||||
|
||||
Hola, sólo añadir para aoshishin1 (¡salud!), que la funcionalidad de Synchronize es semejante a la del evento OnIdle de la aplicación (o de un objeto TApplicationEvents), es decir, el código de interés es ejecutado por el hilo principal de la aplicación (como si el hilo alterno no existiese).
Synchronize tiene mayor utilidad cuando el método Execute del nuevo hilo realiza otras tareas en verdadero segundo plano. Así, las tareas que pueden no ser seguras para hilos (thread-safe) se delegan al hilo principal a través de método Synchronize. Básicamente, las tareas no seguras para hilos son aquellas que afectan a regiones de memoria que varios hilos comparten, como puede ser cambiar o destruir un objeto al que instantes después otro hilo (como el principal) intentaría acceder. Por otra parte, aunque sea algo sobrado para lo que busca aoshishin1, cabe mencionar que como alternativa a Synchronize está el uso de secciones críticas. Saludos cordiales. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Utilizar componentes de formulario en procedimiento | leogobo | OOP | 2 | 27-05-2011 07:24:36 |
Procedimiento Almacenado UPDATE no se ejecuta | Rockin | Firebird e Interbase | 25 | 25-05-2010 21:04:50 |
cuando llamo ejecutar un hilo dentro del proceso del hilo no lo hace | robertosc | Varios | 1 | 14-08-2007 23:11:09 |
procedimiento en un hilo independiente | jorodgar | Varios | 2 | 04-08-2005 11:18:11 |
Intraweb: LLamar desde javascript a un procedimiento de un formulario | Brewster | Internet | 0 | 03-07-2004 13:52:17 |
|