Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - interruzione di un loop da Form
Forum - Visual Basic 6 - interruzione di un loop da Form

Avatar
francesco rit (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/10/2007

Segnala al moderatore
Postato alle 12:50
Martedì, 02/10/2007
Ciao ragazzi,
sapreste dirmi come fare ad interrompere un ciclo manualmente da un Form in VB? Ho provato ad introdurre un controllo pulsante con una variabile di interruzione di ciclo associata ma se ci clicco sopra mentre sta girando l'applicazione va in crash il programma. Sapreste aiutarmi? Grazie a tutti

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 14:42
Martedì, 02/10/2007
Dovresti postare il codice che usi ... e che intendi per "andare in crash" ...

PM Quote
Avatar
francesco rit (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/10/2007

Segnala al moderatore
Postato alle 15:19
Martedì, 02/10/2007
Allora il codice del ciclo interessato è il seguente...


Do Until trovato = True
        
If (Text1.Text = Mid$(Date, 1, 2) And Text2.Text = Mid$(Time, 1, 5)) Then
    
Do Until TmrReceive.Enabled = False

      ' ****** lancio il timer ********
        Dim via As String
        Call TmrReceive_Timer
        Call Wait(0.9)


If (Text4.Text = Mid$(Date, 1, 2) And Text3.Text = Mid$(Time, 1, 5)) Then

TmrReceive.Enabled = False
End If
    
Loop

trovato = True
    
Else

trovato = False

End If
Loop



Si tratta di un timer che parte all'ora e al giorno fissato in text1 e text2 e si ferma all'ora e al giorno fissato in text3 e text4. Il codice funziona ma il problema è che se voglio interrompere mentre è in esecuzione dal Form non so come fare. Per crash intendo che il programma si impalla e non è più possibile tornare al codice sorgente senza riavviare VB.
Grazie dell'aiuto.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 16:58
Martedì, 02/10/2007
Fai diverse chiamate a sub che non sono mostrate ... in questo caso e' difficile darti una indicazione precisa ...

In ogni caso, fossi in te, inserirei nel ciclo piu' interno una

DoEvents

per garantire il funzionamento della "message pump" di Windows ...

PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 14:19
Giovedì, 04/10/2007
non dovrebbe essere possibile interrompere cicli all'esterno di codice.
se proprio devi interromperlo piuttosto sostituisci il ciclo con un timer "intelligente" (che ti fa da ciclo)
per interromperlo basta disattivarlo.

nel senso che al posto del do loop ci metti un bel timer con intervallo 1.

Ultima modifica effettuata da P4p3r0g4 il 04/10/2007 alle 14:20
PM Quote
Avatar
francesco rit (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/10/2007

Segnala al moderatore
Postato alle 9:22
Lunedì, 08/10/2007
In effetti ho provato inserendo il doEvents all'interno del ciclo ma non è possibile lo stesso interrompere il ciclo in runtime.
Comunque la subroutine TmrReceive abilita già un timer che utilizzo per leggere con intervalli costanti alcuni dati, ero però interessato a poter intervenire ad esempio agendo su un pulsante per uscire dal ciclo prima della scadenza del timer...da quanto mi dite sembra che però questo non sia possibile, dovrò trovare altre strade. Grazie a entrambi per l'aiuto, alla prossima

;););)

PM Quote