Certo che può, se non usi ad esempio a caso una finestra modale su cui metti il bottone STOPOriginariamente inviato da 123delphi321
ciao,
usando il primo metodo funziona bene...
ma verificando i vari 'application.processmessages' l'utente potrebbe navigare nel menu della applicazione e potrebbe attivare altre procedure.![]()
Hai "letto" benissimo.per franzauker,
ho letto bene questo problema?
Se invece vuoi fare dei thread "veri" ti consiglio un TBMDThreadGroup,
il quale ha eventi onStart, onTerminate, onThreadstart, onThreadTerminate, onThreadUpdate, onUpdate.
Sostanzialmente puoi definire un array di thread, tipo così
GF_arrayThread[i]:=TBMDThread.Create(self);
GF_arrayThread[i].ThreadGroup:=bmdGruppoThread;
GF_arrayThread[i].onExecute:=myThreadExecute;
GF_arrayThread[i].tag:=i;
e poi avviarli con un banale bmdGruppoThread.start();
Nel threadexecute che è qualcosa tipo questo
procedure myThreadExecute(Sender: TObject;Thread: TBMDExecuteThread; var Data: Pointer);
puoi cercare "chi sei" (attenzione non c'è garanzia di monotonicità nella creazione, quindi l'uomo saggio controlla)
for i:=0 to GF_quanti -1 do
begin
if thread=GF_arrayThread[i].thread then
qualeThread:=i;
end;
ma, soprattutto, da "qualche parte" (nel thread) schiafferai qualcosa del tipo
if ( Thread.Terminated ) then
break;