Ver Mensaje Individual
  #19  
Antiguo 23-08-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
... me siento absoluta y totalmente ignorado !

.... bueno, allá vosotros !

Aun así, os vuelvo a indicar que el código expuesto es imposible que funcione correctamente, ya cambies a Oracle o a superbasededatos Ver 1000.1, oc ambies igualmente cualquier componente a supercomponentes Ver 2021.7.

De nuevo os indico los errores, según mi punto de vista, la mayoría de ellos ya los comenté anteriormente :

Código Delphi [-]
THilo = class(TThread)
  private
    procedure ActualizaMemo;
    procedure PonTag;
  public
    CadenaMostrar: string;
    // Olvídate de este Constructor 
    constructor Create( Suspendido: Boolean );
    // Indica que el procedimiento Execute está en protected
  protected
    procedure Execute; override;
end;

El Thread debe de ser TOTALMENTE encapsulado. A lo mejor a la primera no da problemas, pero a ls segunda o tercera, seguro que dá problemas ...

Código Delphi [-]
procedure THilo.Execute;
begin
     // Aqui no tengo mu claro lo que tengo que poner
     while Self.Terminated = False do begin
           if HPrueba.Tag = 0 then begin
              Synchronize( PonTag );
No debes de acceder a una Variable de HPrueba dentro del propio Thread.

Por qué os empeñais en crear dos hilos diferentes con el mismo nombre de la variable ?
Código Delphi [-]
procedure THPrueba.Button20111Click(Sender: TObject);
var Hilo: THilo;
begin
    Hilo := THilo.Create( True );
    Hilo.FreeOnTerminate := False;
    Hilo.Resume;
    Timer1.Enabled := True;
end;

Por mucho que lo ejecuteis después en un Timer, el Thread se vuelve a crear dentro de Button20111Click con el mismo nombre de la variable, y eso os va a dar problemas porque en ningún caso va a saber referenciar correctamente cualquier llamada.

Por qué no probais :
Código Delphi [-]
procedure THPrueba.Timer1Timer(Sender: TObject);
var Hilo2: THilo;
begin
    Hilo2 := THilo.Create( True );
    Hilo2.FreeOnTerminate := False;
    Hilo2.Resume;
    Timer1.Enabled := False;
end;


Saludos ... !
__________________
Piensa siempre en positivo !
Responder Con Cita