Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   thread object como enlazar? (https://www.clubdelphi.com/foros/showthread.php?t=69142)

gio013 28-07-2010 19:32:26

thread object como enlazar?
 
olas.
ando con el dilema de los hilos...XD
bien enredado si estoy...
bueno estuve mirando los items de delphi y me encontre una ventanita que dice new item "thread object"
este me crea un unit y parece que escribe todo lo que debe tener el hilo para ejecutarlo, el problema es que al querer escribir el procedimiento del hilo donde dice { Place thread code here } este me dice:
[Pascal Error] Unit2.pas(65): E2003 Undeclared identifier: 'form1'
es como si no enlazara las dos forms.

también no diviso donde se le da la orden a el hilo de destruirse.

Neftali [Germán.Estévez] 29-07-2010 16:24:45

Cita:

Empezado por gio013 (Mensaje 371842)
[Pascal Error] Unit2.pas(65): E2003 Undeclared identifier: 'form1'
es como si no enlazara las dos forms.
también no diviso donde se le da la orden a el hilo de destruirse.

Lo primero es un error normal de delphi que no tiene nada que ver con hilos; Simplemente te dice que desde ahí (en esa unit) no encuentra la variable Form1. Normalmente eso se solventaría añadiendo el la Unit del Form1 al USES, pero eso en hilos creo que no lo vas a poder hacer.
Cuando un hilo "interactúa" con elementos de interficie como un form o controles de la VCL debe hacerlo utilizando "sincronización" o el método Synchronize; Si no lo haces así tendrás problemas.

Para destruir los hilos yo utilizo el evento OnTerminate; Donde programo operaciones finales. También hay una propiedad donde puedes decirle que el hilo(thread) se "autodestruya" al acabar.

Puedes reviar un par de ejemplos con código, aquí y aquí. Si no recuerdo mal, en el FTP del club, también tienes algunos ejemplos.

gio013 29-07-2010 20:50:58

grax neftali ...
voy a checar los links....
estudiare a ver que sale..

gio013 30-07-2010 00:53:53

bueno bueno...
jejeje
estuve viendo el ejemplo de un de los thread que dejaste en este link, ahora bien no comprendo bien que se debe colocar en los constructor que debe ir entre los paréntesis.
ejem:
constructor TProgressBarThread.Create(Box: TProgressBar; AStep:Integer; ThreadPriority: TThreadPriority);

lo que veo es los items que intervienen en el thread y por que la palabra Box ó AStep? a que refiere esto?, tienen algún orden?


graxxx por leer

Neftali [Germán.Estévez] 30-07-2010 13:17:39

Cita:

Empezado por gio013 (Mensaje 372073)
constructor TProgressBarThread.Create(Box: TProgressBar; AStep:Integer; ThreadPriority: TThreadPriority);

lo que veo es los items que intervienen en el thread y por que la palabra Box ó AStep? a que refiere esto?, tienen algún orden?

Lo que yo he hecho en este caso es aprovechar el constructor del Thread para pasarle datos que me interesan. En este caso le paso esos valores que luego asigno a propiedades internas del thread dentro del Create:

Código Delphi [-]
constructor TProgressBarThread.Create(Box: TProgressBar; AStep:Integer;
                                      ThreadPriority: TThreadPriority);
begin
  inherited Create(False);
  Self.FStep := AStep;
  pb := Box;
end;

Cuando haces la llamada al Create del Thread ya le pasas los parámetros:

Código Delphi [-]
  Tpb1 := TProgressBarThread.Create(pb1, 1, tpNormal);

Otra opción si te resulta más fácil el dejar el create como lo tiene la clase thread y después de crearlo asignarías los valores de forma manual. Sería algo así:

Código Delphi [-]
  Tpb1 := TProgressBarThread.Create(False);
  Tpb1.Progressbar := pb1;
  Tpb1.Step := 1;
  Tpb1.Priority := tpNormal;

Como tú defines la clase del Thread puedes "redefinir" el Create si te es más cómodo, como he hecho yo.

gio013 07-08-2010 03:52:02

grax...

jeje , neftali revisaré bien lo que me dices, disculpa no a ver contestado antes, pero andaba sin pc....


La franja horaria es GMT +2. Ahora son las 21:04:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi