![]() |
Ayuda con Hilos de ejecucion
hola amigos necesito su ayuda me estoy involugrando en la programacion multihilos en delphi e estado leyendo varios tutoriales de como crear hilos en delphi para una aplicacion y me e puesto a praticar los ejemplo que dichos tutoriales muestran pero resulta que niguno de esos ejemplo me funciona y me dan error aqui le muestro uno que e hecho pero igual no me corre me gustaria que me dijieran el que le hace falta y el que esta mal
|
primero la declaracion esta mala
segundo en el procedimiento execute no hay nada que ejecutar. seria mejor que nos explicaras que queres hacer para poder ayudarte mejor. |
lo que quiero es aprender a utilizar la clase tthread en cualquier aplicacion que valla a necesitarlo
|
Si buscas en google "threads+delphi", con la opción de castellano, te aparecen algunos enlaces, el primero de ellos un tutorial que puede servirte para empezar... (en concreto a mi me salen 15.100 páginas con este tema, por lo que información no te va a faltar)
Un saludo |
Hola, una buena lectura para comenzar la programacion multihilo son los numeros 11,12,13,14,15,16 de la revista sintesis del grupo Albor
http://www.grupoalbor.com/sintesis/contenidos.php?id=11 Un Saludo. |
Cita:
En la sección de ejemplos de mi página hay varios sobre threads. Están con código fuente y funcionan; Échales un vistazo y a ver si te aclaras. Si no puedes pregunar aquí. Si no recuerdo mal, en el FTP del club también hay algun ejemplo que puedes revisar. |
De consejo en consejo
Hola amigo "kurono", simplemente como dicen en diagnostico por imagenes: "El que no sabe que busca, no entiende lo que encuentra . . . ". Para poder aprender a programar con multihilos (dos o mas tareas ejecutandose al mismo tiempo con distinta prioridades [en resumen]) y con cualquier otra herramienta u objeto en Delphi debes tener por lo menos una idea concreta a la cual se aplique, o te daria una solucion. Asi que esta bien que leas sobre TThread, pero tambien es mejor si te propones un objetivo. Por ejemplo, este objeto te da la posibilidad de realizar otra tarea mientras buscas un archivo por el disco. Lo que vale es la imaginación. Para empezar debes tener en claro como funciona este ejemplo de Neftali. Estudia este codigo y pdras entrar al mundo multihilo.
|
ok amigos estoy leyendo algunos tutoriales que e encontrado en google
|
amigos disculpen e logrado hacer un hilo con la ayuda de algunos ejemplo que e contrado pero lo que no entiendo es como llamo el procedimiento execute para ejecutar el hilo
|
Cuanto lo creas le indicas si lo creas suspendido o no, asi:
Si el parametro es Verdadero el hilo no se inicia hasta que le des un resume; Ahora bien si es falso de una vez lo ejecuta al solo crearlo.
|
gracia amigo Kipow lo probare
|
disculpa amigo Kipow pero el codigoTMythrea.Resume; me da error
|
Hola, puedes dar algun dato mas del error o poner el codigo del thread y el codigo desde donde lo llamas.
|
aqui esta parte del codigo que utilizo
|
el error que me da es este
|
A simple vista ha varias cosas que no estan bien, te recomiendo que para crear el hilo vayas a File-new-Other-Thread object, te pide el nombre que deseas darle al hilo en tu caso TMyhilo. Te queda esto.
Para llamar a este hilo por ejemplo desde la unidad principal
Mas cosas, como veras que pone en el codigo del thread no se debe desde un hilo cambiar propiedades ni usar metodos de componentes visuales. Para esto de usar Synchronize. Un ejemplo
Echale un vistazo a esto y comparalo con tu codigo. Te recomiendo leer sobre el tema porque hay muchas cosas que saber antes de empezar a programar, los manuales que te recomende en mi primer post explica todo esto. |
ok probare eso ahora
|
Tenes que instanciar la variable, hacelo como te lo pongo y deberia de funcionar.
|
Mira este ejemplo explica algo
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFPrincipal = class(TForm) EContador: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; type Tcontador= class(TThread) dwTiempo:Dword; iSegundos:integer; Etiqueta:Tlabel; constructor Create; reintroduce ; overload ; procedure execute; override; procedure ActualizarPantalla; end; var FPrincipal: TFPrincipal; Contador:Tcontador; implementation {$R *.dfm} { Tcontador } procedure Tcontador.ActualizarPantalla; begin Etiqueta.Caption:=IntToStr(iSegundos); end; constructor Tcontador.Create; begin inherited Create(True);//lamamos al constructor padre (TThread) dwTiempo:=GetTickCount; iSegundos:=0; end; procedure Tcontador.execute; begin inherited; //CONTAMOS HASTA 10SEGUNDOS while iSegundos<10 do //¿an pasado 1000 milisegundos? if GetTickCount - dwTiempo>1000 then begin //incrementamos el contador de segundos y actualizamos la etiqueta Inc(iSegundos); Synchronize(ActualizarPantalla); //Etiqueta.Caption:=IntToStr(iSegundos); dwTiempo:=GetTickCount; end; end; procedure TFPrincipal.FormCreate(Sender: TObject); begin Contador:=Tcontador.Create(True); Contador.Etiqueta:=EContador; Contador.FreeOnTerminate :=True; Contador.Resume; end; end. |
por cierto el formulario se llama FPrincipal y se coloco en el un label que se llama EContador
|
La franja horaria es GMT +2. Ahora son las 02:17:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi