Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [Visual Basic 2005] Programma che si blocca durante l'esecuzione

    Salve a tutti. Innanzitutto intendo scusarmi per l'ultimo 3d da me aperto in questa sezione che giustamente è stato chiuso perché non ho rispettato il regolamento. Scusate.
    Io ho creato un programma che calcola i numeri primi, cioè, gli dico quanti numeri primi deve trovare e lui li calcola. Il fatto è che se io inserisco un numero elevato, tipo un miliardo, il programma si blocca, anche se continua a lavorare. cioè, l'interfaccia si blocca, con il puntatore del mouse "occupato" quando sono sulla finestra del programma. Quando arriva a termine del calcolo, l'interfaccia torna funzionante come prima e mi vengono restituiti tutti i risultati, ma non vorrrei che l'interfaccia si bloccasse, neanche quando si devono trattare numeri elevati, in quanto ho inserito una progressbar che m'informa a che punto è il progresso e non è bello che si blocchi. Come posso fare??? Grazie mille. (ho provato con system.threading.thread.sleep(100), ma oltre a rallentare il lavoro, l'interfaccia continua a bloccarsi).

    grazie mille per le risposte

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi usare un secondo thread per effettuare il calcolo e lasciare il thread principale ad occuparsi del ridisegno della finestra.

    Se usi un solo thread e lo occupi a fare un lungo calcolo, non ci sara' il tempo per il sistema di occuparsi del ridisegno.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    che identificatore devo usare? system.threading.thread e poi?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Identificatore?

    Devi studiare la programmazione multithreading e tutto quello che e' connesso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ho creato un altro thread che scuota la memoria cache del processore e trovo gia dei miglioramenti in quanto non si blocca durante l'esecuzione, ma continua a bloccarsi quando cambio finestra. cosa devo fare? system.threading.???poi?
    Grazie per le risposte

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Per ovviare a ciò devi usare i delegate,ti rimando a msdn perchè l'argomento è abbastanza articolato.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Zio Bill
    ... scuota la memoria cache del processore ...
    Scusa ... ma che intendi dire ... ?

    Perche' non mostri il codice che stai scrivendo ? ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Scusa, era "svuota la memoria" comunque ecco il codice che mi da i problemi.

    codice:
    Public Sub findprimes(ByVal count As Long)
            'eventualmente pulisci il contenuto della TB
            Me.RichTextBox1.Clear()
            'Aggiungo l'unico numero primo pari:
            Me.RichTextBox1.AppendText("2" + " ")
            'Il numero correntemente analizzato:
            'si parte da 3 e si prendono in consi-
            'derazione solo i numeri dispari
            Dim cur As Integer = 3
    
            'Col ciclo popolo l'array del risultato
            For i As Integer = 1 To count - 1
    start:
    
    
                Dim radq As Integer = Math.Sqrt(cur)
                Dim divisore As Integer
                'dato che abbiamo solo numeri dispari,
                'si analizzano solo divisori dispari
                'fino alla radice quadrata del numero
                For divisore = 3 To radq Step 2
                    'se il risultato di una divisione
                    'da reto zero, il numero non è primo
                    If (cur Mod divisore) = 0 Then
                        'quindi aumento di due il numero analizzato
                        '(ottenendo il numero disperi successivo)
                        cur += 2
                        'e ricomincio ad analizzare
                        GoTo start
                    End If
                Next
                'se il risultato di nessuna divisione da 0
                'il numero è primo
                Me.RichTextBox1.AppendText(cur)
                Me.RichTextBox1.AppendText(" ")
                Me.ProgressBar1.Maximum = TextBox1.Text
                Me.ProgressBar1.Value += 1
                cur += 2
                multi3d()
            Next
    
        End Sub
    mentre vengono eseguiti i calcoli, se imposto la variabile "count" cn un numero troppo alto, l'interfaccia si blocca e se cambio finestra, anche se imposto numeri bassi, anche 1000. Tu mi hai consigliato un nuovo thread, ma nonostante scrivaa me.update e me.refresh, continua a non funzionare adeguatamente. Evidentemente sbaglio qualcosa, ma cosa? grazie.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma il nuovo thread dove lo crei?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Non so se va bene
    codice:
        Public Sub xxx()
            Dim q As New Threading.Thread(AddressOf System.Threading.Thread.MemoryBarrier)
            q.Start()
            Me.Update()
        End Sub

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 © 2025 vBulletin Solutions, Inc. All rights reserved.