PDA

Visualizza la versione completa : [Delphi 6] Interrompere un ciclo infinito


Girandol0
19-12-2004, 11:09
Ciao!
Sto realizzando un programma di simulazione nel quale è previsto che una istruzione venga eseguita più volte richiamata in un ciclo. Se però l'utente si sbaglia a utilizzare il programma parte un ciclo infinito e vorrei poterlo interrompere. Questo è il codice del loop:

repeat
until (Mp0.Step) or (alt= true);
Mp0.step è una funzione che dopo avere eseguito un tot di istruzioni ti da in uscita true o false a seconda se è già arrivato al termine della simulazione. La variabile alt invece avevo pensato di usarla come variabile di blocco. Il problema è che quando parte il loop infinito nn riesco a settarla a true! Avete qualche idea su come posso fare? In teoria l'ideale sarebbe settarla a true dopo avere spinto una combinazione di pulsanti tipo ALT+A o qualcosa di simile...

Grazie in anticipo

AlbertoPicca
19-12-2004, 12:20
Penso che il ciclo che hai scritto non sia la soluzione migliore per ottenere quello desideri.
Nel tuo caso proverei ad usare il componente TTimer che ti permette di scandire ogni N-millisecondi una particolare procedura.

Per abilitare il timer basta impostare la proprietà enabled a true, mentre per fermarlo basta settarla a false.

L'evento OnTimer é quello che devi utilizzare per definire le azioni da svolgere .

Prova a vedere se questa soluzione é quella più funzionale.

:ciauz:

Girandol0
19-12-2004, 12:22
In effetti nn è male come idea...il timer nn ho mai avuto occasione di utilizzarlo però mi sa che potrebbe essere una valida soluzione!! Grazie per il consiglio! Ti farò sapere!

Girandol0
19-12-2004, 16:22
Grazie per il consiglio!! Adesso funziona perfettamente!!

alka
19-12-2004, 17:49
Se il tuo ciclo di operazioni serve per compiere una simulazione, spesso il TTimer non ha prestazioni sufficienti per poter essere considerata la soluzione più valida.

Ad esempio, quando si effettua una stampa, non è possibile utilizzare un timer, il programma è impegnato ad elaborare liberamente i dati da stampare, ma si vorrebbe comunque consentire all'utente di poter interrompere il processo in qualsiasi momento.

In tal caso, trovo che sia indicato l'uso di thread.

Attraverso un thread, è possibile spostare cicli di elaborazioni e altri processi analoghi in un percorso di esecuzione alternativo e concorrente che esegue in modo asincrono, in perfetta concorrenza con il thread primario dell'applicazione che, però, rimane libero di intercettare i messaggi provenienti dal sistema (ad esempio, clic sul pulsante di annullamento) e interrompere il percorso secondario di esecuzione.

Ciao! :ciauz:

Girandol0
19-12-2004, 20:29
Originariamente inviato da alka
Se il tuo ciclo di operazioni serve per compiere una simulazione, spesso il TTimer non ha prestazioni sufficienti per poter essere considerata la soluzione più valida.

Ad esempio, quando si effettua una stampa, non è possibile utilizzare un timer, il programma è impegnato ad elaborare liberamente i dati da stampare, ma si vorrebbe comunque consentire all'utente di poter interrompere il processo in qualsiasi momento.

In tal caso, trovo che sia indicato l'uso di thread.

Attraverso un thread, è possibile spostare cicli di elaborazioni e altri processi analoghi in un percorso di esecuzione alternativo e concorrente che esegue in modo asincrono, in perfetta concorrenza con il thread primario dell'applicazione che, però, rimane libero di intercettare i messaggi provenienti dal sistema (ad esempio, clic sul pulsante di annullamento) e interrompere il percorso secondario di esecuzione.

Ciao! :ciauz:
La parola mi giunge completamente nuova :confused:
Che cosa sarebbero esattamente?

alka
20-12-2004, 11:44
Originariamente inviato da Girandol0
La parola mi giunge completamente nuova :confused:
Che cosa sarebbero esattamente?
Trovi tutti i dettagli su questo tutorial (http://makeashorterlink.com/?R206130F8) veramente ben fatto. :)

Loading