Newsgroup: it.comp.lang.delphi
Titolo: terminare una routine

Dopo due serate passate a cercare su google, non mi resta che scocciare 
voi...
Diciamo che in un programma vengono eseguite in serie alcune routine, ognuna 
fa dei calcoli e si prende il suo bravo tempo.
Come posso ad un qualsiasi punto nell'esecuzione del programma (io non so 
nemmeno quale routine sta lavorando in quel momento) uscire dalla routine in 
corso ed interrompere il tutto senza chiudere l'applicazione?
Ho trovato solo terminateprocess che pero', ammesso che riesca ad usarlo 
:-((  mi pare chiuda proprio il programma, e qualche esempio di utilizzo del 
tasto esc che pero' nel mio caso non mi pare funzioni.
Grazie e come al solito scusate se la domanda e' terra terra, come si 
notera' non sono espertissimo :-))))
-- 
F&R 

devi utilizzare i threads.
A.

 corso ed interrompere il tutto senza chiudere l'applicazione? [...]
L'interruzione a cui ti riferisci è "comandata", cioè effettuabile 
dall'utente in qualsiasi momento, oppure si riferisce ad una condizione 
particolare che dovrebbe scatenare l'interruzione dell'elaborazione in 
corso (tipo "dato non valido")?
Nel secondo caso, potresti generare un'eccezione silenziosa ricorrendo 
alla procedura *Abort*; se è richiesto l'intervento dell'utente, segui 
il consiglio di Alberto e fai uso dei thread.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
     Non hai la possibilità di scaricare Turbo Delphi Explorer?
     Te lo spedisco io!! [
http://www.marco.breveglieri.name/?p=48
]

> devi utilizzare i threads.
era quello che temevo... :-)
-- 
F&R 

 il consiglio di Alberto e fai uso dei thread.
per farla piů semplice, potrebbe anche usare il sistema (*) del
procedure DoSomething(var Cancel: Boolean);
begin
  while not Cancel do
  begin
    ..istruzioni..
    Application.ProcessMessages;
  end;
end;
..e usare nella form, per esempio, un campo
  private
    FCancel: Boolean;
poi la routine viene chiamata con..
  DoSomething(FCancel);
e poi alla pressione di un tasto si puň sempre interrompere..
procedure TForm2.Button1Click(Sender: TObject);
begin
  FCancel := True;
end;
Per ridurre le chiamate ad Application.ProcessMessages si puň semplicemente 
fare cosě:
procedure DoSomething(var Cancel: Boolean);
const
  STEP = 10;  //questo dev'essere "aggiustato a mano"
var
  i: Integer;
begin
  i := 0;
  while not Cancel do
  begin
    ..istruzioni..
    Inc(i);
    if i mod STEP then   
      Application.ProcessMessages;
  end;
end;
(*) č un sistema che ha i suoi svantaggi, perň č semplice da implementare.
-- 
Mauro Falzari
"Rosa, ella ha vissuto ciň che vivono le rose,
Lo spazio d'un mattino".
  (François de Malherbe, 1555-1628)

       Application.ProcessMessages;
if (i mod STEP) = 0 then


 (*) è un sistema che ha i suoi svantaggi, però è semplice da implementare.
Con tutti gli effetti collaterali da gestire, per me è meglio usare i 
*thread* che, comunque, non sono così complessi come sembrano una volta 
acquisito un minimo di dimestichezza. :-D


 acquisito un minimo di dimestichezza.
In effetti e' stata una buona occasione per farmi una seria ricerca sui 
thread (ed infatti a quest'ora me li sto ancora studiando!) e cercare di 
cominciare a
capirci qualcosa.
Non e' semplice ma se po' fa'....
Ringraziando Alberto, Marco e Mauro che mi hanno risposto, e anche tutti gli 
altri che partecipano al newsgroup e con le loro mail mi insegnano sempre 
qualcosa, per coloro che dovessero avere come me la voglia di dare 
un'occhiata ai thread, mi permetto di indicare i tutorials che ho trovato 
piu' abbordabili:
http://www.programmazione.it/index.php?entity=eitem&idItem=31840
 (in 
inglese)
http://www.programmazione.it/index.php?entity=eitem&idItem=31497
http://www.delphifr.com/tutoriaux/DELPHI-THREADS_231.aspx
 (in francese)
http://www.programmazione.it/index.php?entity=eitem&idItem=31867
 
(tostarello, in inglese)
Buonanotte!
-- 
F&R

 piu' abbordabili [...]
A mio avviso, questo è tra i migliori:
http://groups.google.it/group/it.comp.lang.delphi/msg/9bef0b8b1e0e20ae


Continuando a segnalare i tutorials piu' interessanti sui thread, laddove
possano essere di interesse comune, indicherei (in inglese)
http://cc.borland.com/Item.aspx?id=14809
 (su codecentral di borland)
nonche'
http://www.sklobovsky.com/community/threadmare/threadmare.htm
Per quest'ultimo link tuttavia, gli esempi che dovrebbero corredare
l'articolo, purtroppo non sembrano piu' disponibili, se qualcuno dovesse
esserne in possesso, mi fara' cosa gradita se - anche se datati - me li
vorra' postare in privato.
Grazie.
-- 
F&R