![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
En tu caso, tu código:
Debe quedar similas a este:
Esto significa que ese código (UpdateEdit) se ejecutará de forma excluyente, para que no de problemas. CONCLUSIÓN: Si utilizamos muchos Synchronize dentro de un thread es malo, porque continuamente estamos utilizando código "excluyente", por lo que la "gracia" del thread se pierde. De ahí que el Synchronize deba utilizarse para las cosas imprescindibles.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#2
|
||||
|
||||
|
Hola Neftali,
Aver mira tengo esta unidad donde se ejecuta el thread:
Por otra parte, en la llamada del button1 tengo esto:
Como ves el hilo lo hago en una unidad aparte de la del formulario, y siemplemente hago la llamada. El caso es que cuando se ejecuta, en un componente tEdit que he situado en el formulario para ver si podía escribir mientras trabajaba el bucle, sigo sin poder hacer nada. es decir que se ha "colgado" y no puedo hacer nada hasta que acaba. He intentado hacerlo como me indicabas, usando un procedimiento "independiente" sin controles visuales (salvo la barra de progreso). Entonces, ¿donde está mi error? ¿en que me estoy equivocando para que el edit quede bloqueado por el bucle? Me he tomado la libertad de adjuntar el ejemplo que me he inventado digamos, para probar los hilos por si podeis echarle un vistazo y ver donde falla. Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
|
#3
|
||||
|
||||
|
Es normal que no puedas escribir nada.
Tal y como te he comentado antes, lo que pones a ejecutar en el synchronize, es código que no se ejecuta en paralelo. Para que me entiendas es algo así. Cuando llamas al synchronize, el thread detiene el programa original, ejecuta lo que hay dentro del synchronize y luego vuelve a el control al programa principal. Por eso he comentado que en el synchronize hay que poner el mínimo código posible. Según la explicación anterior, tú has hecho justo TODO lo contrario. Has colocado TODO el código del hilo en el synchronize. Por lo tanto tu hilo, tal y como está, no saca ningún provecho a las ventajas de ejecutar código en paralelo. Cambia tu código por este, y aprecia las diferencias:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#4
|
||||
|
||||
|
Hola neftali, pues si que hay diferencia si, voy a seguir haciendo mas pruebas a ver si puedo sacarle partido a los hilos, la verdad es que... siendo filosofico (jaja) los hilos me resultan hirientemente útiles, lo de hirientes es por que o lo haces bien o a la menor oportunidad te darán la "patada"
Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
|
#5
|
||||
|
||||
|
Hola buenas de nuevo,
a ver segun entiendo, en un hilo no deben haber referencias a componentes visuales, pero en ese caso, si las operaciones de un procedimiento incluyen que se vaya mostrando información ¿como seria? ¿el hilo debería devolver el control a un procedimiento para "pintar" la informacion en una etiqueta (por ejemplo) y luego este procedimiento devolver el control al hilo para continuar? ¿eso sería así, pasandose el control de uno a otro hasta terminar? iba a poner un ejemplo real de la situación que tengo entre manos, pero son muchas lineas y no me deja, así que lo adjunto a este mensaje. Tengo este procedimiento... ... que hace la llamada al procedimiento adjunto, ¿que parte del procedimiento debe estar fuera del hilo y cual dentro? Un saludo y gracias.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
|
#6
|
||||
|
||||
|
Cita:
Yo no he dicho que: "en un hilo no deben haber referencias a componentes visuales" Mis palabras fueron las siguientes: Eso se traduce en que desde dentro de un hilo no puedes acceder "alegremente" a componentes y código que tengas fuera de él..." "Es decir, desde dentro del hilo, NO PUEDES llamar "directamente" a un botón del formulario (Form1.Button4.Enabled)...." "...por lo tanto tenemos que asegurarnos que cuando accedemos desde el thread a "elementos externos" lo hagamos de forma exclusiva." Creo que la diferencia es evidente. SI se puede acceder a elementos externos como componentes, pero NO SE PUEDER HACER DIRECTAMENTE. Debes hacerlo utilizando Synchronize.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#7
|
||||
|
||||
|
Cita:
Pero eso que parece tan complicado, se hace utilizando Synchonize de forma fácil.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#8
|
||||
|
||||
|
Cita:
* principal.Memo1 * principal.LabEdit1 * principal.opc1. * principal.Memo2 ... Estos elementos deberías estar como parámetros, porque en este procedimiento está "mezclando" lógica de negocio con temas visuales. O te lo planteo de otra forma; Imagina que debes usar este procedimiento de TrocearArchivo llamándolo desde un programa que no tiene formularios. ¿Puedes hacerlo?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#9
|
||||
|
||||
|
Hola neftalí,
a ver contesto desde mi ignorancia, a tu pregunta... que yo sepa se puede llamar a un programa desde otro, por lo que deduzco que si un programa x está formado unicamente por un procedimiento sin formularios (en este momento estoy pensando en una aplicacion de consola), otro programa podrá invocarlo o llamarlo sin problemas, así que mi respuesta es si. Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Crear Hilos de Ejecución con TIdFTP | JAI_ME | Varios | 12 | 13-12-2013 18:28:39 |
| Ayuda con Hilos de ejecucion | kurono | Varios | 19 | 15-01-2011 15:36:40 |
| Problema con hilos de ejecucion | gueritox | OOP | 1 | 14-08-2010 15:26:06 |
| Hilos de ejecucion | el toluca | Varios | 2 | 29-06-2004 22:59:04 |
|