Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    VB6 sospendere un ciclo for

    Salve a tutti, avrei bisogno di bloccare momentaneamente un ciclo for, vedere a che punto è del calcolo e nel caso riprendere a calcolare oppure uscire (se il calcolo già mi soddisfa)
    Avevo pensato a questo codice nel quale quando clicco sul form il tasto sospendi, questo diventa

    sospendi=not sospendi

    solo che appena comincia il for, non posso più cliccare nessun tasto sul form altrimenti s'impalla.. come potrei risolvere?

    codice:
     
            
            Sospendi = False
            NomeFile = "C:\PROVASTAMPA2.txt"
            Open Nomefile For Output As #1
    
            Dim NR As Long
            Dim c, P As Integer
            Dim progresso As Double
            ReDim combiS1%(1 To ElemScelti)
            ReDim combiS2%(1 To ElemScelti)
            progresso = 0
            FileDaCuiStampare = Nomefile
            N = contatore
            K = ElemScelti
            NR = Cnk(N, K)  ' Numero delle righe
            
            For c = 1 To K
                combiS1(c) = c
            Next c
            For R = 2 To NR
     
                P = K ''P=6    Questo è un ciclo di confronto con la riga sopra
                Do Until combiS1(P) < N - K + P  '' finche l'elemento della riga sopra e colonna P è < 4+P
                    P = P - 1                         '' P diminuisce di uno, P=5
                Loop
                
                For c = 1 To P - 1
                    combiS2(c) = combiS1(c)
                Next c
    '
                combiS2(P) = combiS1(P) + 1
    '
                For c = P + 1 To K
                    combiS2(c) = combiS2(c - 1) + 1
                Next c
                
    '' salvo la riga su un file 
                Call Scrivi(Val(selezio(combiS2(1) - 1)), Val(selezio(combiS2(2) - 1)), Val(selezio(combiS2(3) - 1)), Val(selezio(combiS2(4) - 1)), Val(selezio(combiS2(5) - 1)), Val(selezio(combiS2(6) - 1)), Val(selezio(combiS2(7) - 1)), Val(selezio(combiS2(8) - 1)), Val(selezio(combiS2(9) - 1)), Val(selezio(combiS2(10) - 1)))
            
                progresso = progresso + 1
                ProgressBar.Value = progresso * 100 / (2 * NR)
    
                If Sospendi Then
                    Close #1
    '                    Close #2
    '                    Command5.Caption = "Continua"
                    Do While Sospendi
                        DoEvents
                    Loop
    '                    Command5.Caption = "Sospendi"
                    Sospendi = False
                    Open Nomefile For Append As #1
    '                    
                End If
                        
                For I = 1 To K
                    combiS1(I) = combiS2(I)
                    combiS2(I) = 0
                Next
               
            Next R
        Close #1

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    Il codice che posti è alquanto confuso e non si capisce quale ciclo For...Next, dei cinque o sei presenti, vorresti interrompere.
    Comunque ciò che balza all'occhio è che l'istruzione DoEvents - che è quella che ti permetterebbe di rilevare il click su un CommandButton - si trova all'interno di un ciclo Do...Loop che viene eseguito solo se la variabile booleana Sospendi è True; non quando è False.

  3. #3
    Il ciclo for che mi interessa è quello principale e la cosa importante è questa:

    codice:
    Private Sub cmdSospendi_Click()
    
        Sospendi = Not Sospendi
    
    End Sub
    
    
    Private Sub cmdElabora_Click()
         
         Nomefile = "C:\PROVASTAMPA.txt"
         Open Nomefile For Output As #1
         sospendi = false
    
         for R = 1  to 1000000
    
             ..
             ..
             ..
    '            se sospendi= false non interrompo il calcolo e passo allariga successiva
    '            ma se è = True allora entro nell'if sospendi
                 If Sospendi Then
    
                    Close #1
    '               CmdSospendi.Caption = "Continua"
    
    ' Finchè non riclicco il tasto sospendi, questo rimarrà true e posso controllare 
    ' il calcolo eseguito fino a quel momento, senza uscire dal for, perchè voglio poter
    ' continuare il calcolo dal punto in cui mi ero fermato
    
                    Do While Sospendi
                        DoEvents
                    Loop
    '               
                    CmdSospendi.Caption = "Sospendi"
                    Sospendi = False
                    Open Nomefile For Append As #1
    
                End If
    
         Nexr R
    
    End Sub

    "Comunque ciò che balza all'occhio è che l'istruzione DoEvents - che è quella che ti permetterebbe di rilevare il click su un CommandButton - si trova all'interno di un ciclo Do...Loop che viene eseguito solo se la variabile booleana Sospendi è True; non quando è False."

    Sospendi dovrebbe diventare True quando clicco il tasto Sospendi, poi rimanere True (essere dentro il Do while)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    Originariamente inviato da litterone
    Sospendi dovrebbe diventare True quando clicco il tasto Sospendi, poi rimanere True (essere dentro il Do while)
    Se la variabile Sospendi è inizializzata a False il ciclo
    codice:
    Do While Sospendi
         DoEvents
    Loop
    non verrà mai eseguito. Caso mai dovrà essere
    Do While Not Sospendi

  5. #5
    L'ho cambiata ma il risultato è sempre lo stesso... Form inagibile finchè esegue il for

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.