Ver Mensaje Individual
  #3  
Antiguo 30-08-2006
chalitox chalitox is offline
Registrado
 
Registrado: jun 2006
Posts: 7
Reputación: 0
chalitox Va por buen camino
Este el codigo que ejecuto...

Código Delphi [-]
procedure TMonitor.FinalizarMonitoreoDeStats;
begin
    {:
        Indica el estado actual de monitoreo.
        -1: Terminar de monitorear
        0: Monitero detenido
        1: Primer monitoreo
        2: Monitoreando
        3: Time out
        4: No conectado a la red

        Con esto, si estado > 0 siempre estara monitoreando o intentando monitorear.
    }
  estado := -2;

    // por si no estaba monitoreando
    if self.Suspended then
    self.Resume;    
end;

procedure TForm1.Logout;
var
    i, count, r: Integer;
    {
        TMonitor = class(TThread)
        Lo que hace este monitor es monitorear un servidor.
    }
    monitor: TMonitor;
begin
    // rutina de loguot
    if self.panelSplit.Visible then
        begin

        count := self.monitres.Count;
        // Detener todos los monitores
        for i:=0 to count-1 do
            begin
            monitor := TMonitor(self.monitres.Items[0]);
            monitres.Delete(0);
            
            // FinalizarMonitoreo lo que hace es cambiar el estado interno 
            // del monitor para que termine su ejecucion lo mas rapido 
            // posible, y como notifica muchos eventos
            // por ej:
            //    Detenido
            //    Desconectado
            // es que debo esperarlo, porque se puede dar que se termine
            // cerrar el Form y el thread no termino de cerrarse... y asi
            // con c/u de los monitores
            monitor.FinalizarMonitoreo;
            r := monitor.WaitFor;
            end;

        // Ocultar y desactivar componentes
        self.SetActivoComponentesDeMonitoreo(False);
        self.SetActivoComponentesLogin(False);

        end;
end;

Vale aclarar que el "Terminate := True" lo hace el mismo TMonitor dentro del Execute cuando consulta el estado y se da cuenta de que tiene que terminar.

Gracias de ante mano, saludos
Ramiro
Responder Con Cita