PDA

View Full Version : uscire da un for


swarm
25-01-2006, 09:00
salve a tutti

sto usando il visual c++ 6.0 enterprise.

devo implementare un ciclo for che compie un tot numero di iterazioni (scansione area schemo), e questo ciclo for deve ripetersi finche nn viene premuto un tasto sulla tastiera oppure si fa click col mouse su uno dei tasti....

sapreste dirmi come fare?

swarm
27-01-2006, 15:11
salve a tutti

sto usando il visual c++ 6.0 enterprise.

devo implementare un ciclo for che compie un tot numero di iterazioni (scansione area schemo), e questo ciclo for deve ripetersi finche nn viene premuto un tasto sulla tastiera oppure si fa click col mouse su uno dei tasti....

sapreste dirmi come fare?
raga, ho pensato che mi servirebbe un "qualcosa" che facesse un controllo di messaggi arrivati (input tastiera e/o mopuse) a ogni fine ciclo....

nessuno mi sa aiutare?

mrjohnny
28-01-2006, 00:55
raga, ho pensato che mi servirebbe un "qualcosa" che facesse un controllo di messaggi arrivati (input tastiera e/o mopuse) a ogni fine ciclo....

nessuno mi sa aiutare?

mi dispiace non poterti aiutare.. pero' ti scrivo una soluzione in VB .NET (se puo' esserti utile..)

supponiamo che questo è il tuo ciclo for:

dim mouse as integer

Sub controllociclofor()
dim i as integer
for i = 1 to 10
' operazioni da compiere..

if mouse = 1 then

mouse = 0
exit for
end if

next

end sub

'questo rileva l'evento clic..:

Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown

mouse=1

End Sub


Note:
all'evento clic, viene valorizzata la variabile: mouse =1
di conseguenza il ciclo for si ferma..


mah capisco che non ho risolto il tuo problema..
se puoi prendi spunto da questo..

By MrJohnny..

kk3z
28-01-2006, 12:46
Il loop se ho capito bene è in un thread, giusto?

71104
28-01-2006, 13:52
Il loop se ho capito bene è in un thread, giusto? kk3z, su Windows qualsiasi cosa è in un thread :D
il thread è l'unità fondamentale di esecuzione, lo scheduler di Windows lavora con quelli: tu che sei esperto con le Win32 dovresti saperlo :Prrr:

@swarm: per rispondere direttamente al titolo del topic, per uscire da un ciclo si usa break ^^
per sapere quando fare il break vedi tu, se vuoi lavorare con un solo thread ogni tanto penso che devi svuotare la coda dei messaggi, altrimenti se lavori con due thread penso che ti convenga mettere le elaborazioni lunghe in un worker a parte che ogni tanto deve controllare lo stato di un flag...
siccome il worker thread il flag lo deve solamente leggere, non c'è bisogno di sincronizzare la variabile ;)

swarm
28-01-2006, 14:12
kk3z, su Windows qualsiasi cosa è in un thread :D
il thread è l'unità fondamentale di esecuzione, lo scheduler di Windows lavora con quelli: tu che sei esperto con le Win32 dovresti saperlo :Prrr:

@swarm: per rispondere direttamente al titolo del topic, per uscire da un ciclo si usa break ^^
per sapere quando fare il break vedi tu, se vuoi lavorare con un solo thread ogni tanto penso che devi svuotare la coda dei messaggi, altrimenti se lavori con due thread penso che ti convenga mettere le elaborazioni lunghe in un worker a parte che ogni tanto deve controllare lo stato di un flag...
siccome il worker thread il flag lo deve solamente leggere, non c'è bisogno di sincronizzare la variabile ;)

ciao

ti spiego meglio quello che devo fare...

in pratica, il programma principale, una volta dato lo "start", esegue un ciclo for che fa la scansione di un'area dello schermo (plot+vari calcoli), e se nn succede nulla, finito un ciclo deve farne un altro.

In pratica quello che voglio è che, se durante uno dei cicli for, premo su uno dei pulsanti di controllo o premo un tasto associato, il ciclo finisca,controlli cosa è stato premuto, aggiorni le variabili, e poi ricominci (se deve). (cioè mi va bene se l'aggiornamento variabili è fatto quando inizia una nuova scansione)

Pensavo che una soluzione fosse lavorare con due thread (il principale per i comandi e un altro per il ciclo for), ma nn sapevo come fare.....

Con un solo thread, come si fa a richiedere a un certo punto del programma, di esaminare quale tasto o quale evento mouse è avvenuto?

GRAZIE!!

kk3z
29-01-2006, 12:48
kk3z, su Windows qualsiasi cosa è in un thread :D
il thread è l'unità fondamentale di esecuzione, lo scheduler di Windows lavora con quelli: tu che sei esperto con le Win32 dovresti saperlo :Prrr:
Eddai :D intendevo "un altro thread", swarm mi ha capito dato che è la continuazione dell'altro thread (e qui non parlo di windows)

swarm
31-01-2006, 16:02
Eddai :D intendevo "un altro thread", swarm mi ha capito dato che è la continuazione dell'altro thread (e qui non parlo di windows)

si ti ho capito benissimo, il loop è nel thread principale ( e unico)

raga, datemi una mano/consiglio...
come faccio a verificare quali eventi sono accaduti durante un for?

swarm
01-02-2006, 08:30
raga, secondo voi dovrei gestire i messaggi tipo con PeekMessage e GetMessage?