Costruttore:
codice:
constructor TAggiornaStato.create(q,q1,q2:TADOQuery;priorita:TThreadPriority;vedi_storico:boolean);
begin
  FreeOnTerminate:=false;
  qry:=q;
  qry2:=q1;
  qry3:=q2;
  esegui:=true;
  inherited Create(False);
end;
Procedura che dovrebbe fermare l'elaborazione:
codice:
procedure TAggiornaStato.fermaElaborazione;
begin
  esegui:=false;
end;
Procedure dell'execute :
codice:
procedure TAggiornaStato.Execute;
begin
  updateState;
  while (esegui) do
  begin
    try
      if (Terminated) then
        updateState;
    except
      on e:exception do
      messageDlg('Errore Thread: '+trim(e.message),mtwarning,[mbOk],0);
    end;
    Sleep(4000);
  end;
end;
quando lo termino faccio :

codice:
var
  //dichiarato allinizio ovviamente
  AGGST:TaggiornaStato;
...


begin
  ....
  AGGST.fermaElaborazione
  //attendo il terminate
  repeat
  until AGGST.terminate;
  AGGST.free;
  AGGST:=nil;
end;
Il problema è che ora alle volte rimane incatrato in quel ciclo...