Aprendiendo Hilos, (no corre como un hilo)
Hola Hermanos.
Estoy aprendiendo a programar hilos, hice un ejemplo muy simple de un programa que cada segundo que pasa le cambia el titulo a una venta a 1 y luego 2 y luego 3 y asi sucesivamente, el objetivo es que dicha acción la haga por medio de un hilo de ejecución, y la forma de saber si lo esta haciendo así es que durante el proceso podamos arrastrar nuestra aventana con el mouse o apretarle a otro boton y que haga algo simple como cambiar el color de la ventana etc, ustedes saben. El problema es que al ejecutar el hilo...si funciona, pero no me libera la ventana, pareciera que no se estuviera ejecutando realmente en un hilo. Quiero ver si alguien de alma caritativa me pudiera decir que estoy haciendo mal. Enseguida tratare de explicar el código simple que uso: Aqui, simplemente declaro un nuevo objeto de clase TThread: Código:
type Código:
procedure CambiaTituloEnHilo.Execute; Código:
Procedure CambiaTituloEnHilo.Actualiza_texto; CambiaTituloEnHilo, esto puede ser al apretar un boton y cuando eso pase pues el constructor execute se mandara llamar: Código:
MiHilo:=CambiaTituloEnHilo.Create(false); Osea si funciona..si cambia el titulo de la ventana pero me inhibe la ventana. Pues que estoy haciendo mal? Gracias. |
Te aconsejo que te informes sobre el procedimiento "Synchronize", porque al parecer no has entendido la dinámica ni el funcionamiento del mismo.
Todo lo que ejecutes en el procedimiento pasado a "Synchronize" se ejecuta en el hilo principal, logrando una sincronización de todos los hilos. Por ello se produce el "cuelgue" de tu aplicación. Ese cuelgue se debe al procedimiento "Sleep", el cual bloquea al hilo durante 1000 milisegundos. Tan solo debes alterar el código como te indico a continuación, ejecutando dicho procedimiento dentro del "Execute" del hilo:
|
Gracias
y si lo bloquea por que lo volviste a poner??
Saludos |
Cita:
Tu error era colocarlo dentro del procedimiento que ejecutas mediante Synchronize(). Creo que debes releer mi respuesta anterior de nuevo, con detenimiento. Un saludo. |
Pregunta
Tienes razon, ya lo arregle,
La onda es que quiero hacer un auto arranque de un programa para que se actualize solo a la nueva version y luego arranque, para tal motivo necesitaba de hilos para que al ir bajando el programa con otro hilo fuera consultando el tamaño del archivo bajado, ahora la bronca es que el hilo que mide el tamaño del archivo bajandose solo funciona en los primeros momentos de la descarga, y luego cuando termina de descargar el archivo, vuelve a recuperar su funcion el hilo que da el tamaño. Es normal? |
Jalo pero a medias
La funcion que uso para obtener el tamaño es esta:
Código:
function tamanoFichero2 (sFileToExamine: string) : Integer; Creo el hilo que va bajar el archivo y luego el hilo que va a ir midiendolo Código:
midescarga:=TDescarga.Create(false); y luego ya se frenaz y cuando termina el otro entonces ya se recupera. Algo quizas haga mal...que sera? Alguien lo sabe? La parte donde declaro los objetos es esta: Código:
TDescarga = class(TThread) |
La franja horaria es GMT +2. Ahora son las 09:45: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