simply4you.it simply4you.it

   Home
     Articoli, Tutorial...
       .NET
         Multithreating

Autore
Federico Barbati

E-Mail
federicobarbati@tiscali.it



Commenta anche tu !  














   Invia il link di questo articolo ad un amico  Invia ad un amico Visualizza la versione stampabile di questo articolo  Stampa Commenta questo Articolo  Commenta Parlane in Chat  Chat   Parlane sul Forum  Forum

Corsi Programmazione in aula:
ASP, Dreamweaver MX, Flash MX, HTML, Introduzione alla programmazione strutturata, JSP/Servlet, JavaScript, Linguaggio C, Linux programmazione shell, Oracle PL/SQL, Oracle Portal 9.0.2, PHP, Perl, Programmazione Java, Programmazione Java avanzata, Programmazione web Corso avanzato, Programmazione web Corso base, Programmazione web Corso intermedio, XML


Visual Basic .NET - Il Multithreating nelle applicazioni .Net
di Federico Barbati


Una delle novità più interessanti introdotte con Visual Basic punto net e il supporto nativo del Multithreating ossia multi processo.

Il nostro scopo è sviluppare un'applicazione che esegue più processi contemporaneamente senza lo stato di morte apparente che caratterizza normalmente le nostre applicazioni in caso di operazioni lunghe o addirittura il blocco in caso di cicli infiniti.

E' proprio quest'ultimo caso che ci interessa simulare!

Iniziamo con l'aprire il vostro Visual Studio .Net ed aggiungere un progetto con nome: Multithreading.

Aggiungere un semplice Form vuoto al progetto ed inserire sul form una ListBox e tre pulsanti (Button1, Button2, Button3) ai quali impostare la proprietà .Text (non esiste più .Caption in Vb.Net) rispettivamente "Esegui", "Ferma", "Chiudi"



Nelle dichiarazioni generali inserire:

Dim t As Threading.Thread
Dove "t" sarà un'istanza della classe Tread che a sua volta è contenuta nel namespace System.Threading del Framework.net.
A questo punto, inserire questa Sub nel codice del Form che provocherà un ciclo infinito:

Private Sub LupInfinito()
        'questa è una subrutine che genererà un ciclo infinito
        Dim i As Int32 = 1
        Do While True
            ListBox1.Items.Add("Iterazione: " & i)
            'nuovo metodo di incremento veloce
            i += 1
        Loop
 End Sub


Questo ciclo infinito, ad ogni incremento di "i", inserirà il suo valore in una ListBox. Da notare che è stato utilizzato il nuovo metodo di incremento veloce "i+= 1" al posto di "i = i+1".
Adesso che abbiamo il blocco di codice da eseguire, bisogna assegnarlo ad un nuovo Tread e farlo eseguire.
Nel nostro caso, abbiamo già inizializzato la variabile "t" come oggetto Tread.
Per cui, fare doppio click sul tasto Button1 e nella sub Button1_Click inserire il codice:
t = New Threading.Thread(AddressOf Me.LupInfinito)
t.Start()
L'operatore AddressOf crea un oggetto delegate al metodo LupInfinito. Un delegate, è un puntatore ad una funzione.
Quindi, abbiamo creato una nuova istanza dell'oggetto Tread al quale abbiamo passato un riferimento al blocco di codice LupInfinito.
Il metodo Start , avvia il processo.
Una volta che il processo è in esecuzione, si ha la possibilità di intervenire su di esso usando dei metodi dell'oggetto Thread. Nel nostro esempio, utilizzeremo il metodo Sleep che ci consente di creare delle pause. Quindi, aggiungendo "Threading.Thread.CurrentThread.Sleep(2000)" a "Lupinfinito", avremo un ritardo di due secondi (indicati dall'intero 2000) prima che la ListBox1 visualizzerà il valore successivo.

    Private Sub LupInfinito()
        'questa è una subrutine che genererà un ciclo infinito
        Dim i As Int32 = 1
        Do While True
            ListBox1.Items.Add("Iterazione: " & i)
            'nuovo metodo di incremento veloce
            i += 1
            'crea un ritardo nell'incremento
            'in pratica creo una pausa del tread
            'Threading.Thread.Sleep(2000)
            Threading.Thread.CurrentThread.Sleep(2000)
        Loop
    End Sub


CurrentThread, è un metodo pubblico, che ci permette di far riferimento al processo che attualmente è in esecuzione.
Altri metodi simili a Sleep sono: Suspend, Resume e Abort, dove Suspend blocca il processo in esecuzione fino a quando non viene chiamato il Resume e Abort conclude il processo in atto.
E' proprio quest'ultimo che utilizzeremo nella nostra applicazione per fermare il ciclo infinito che abbiamo creato:
fare doppio click sul tasto Button2 e nella sub Button2_Click inserire il codice:
t.Abort()
fare doppio click sul tasto Button3 e nella sub Button3_Click inserire il codice:
end


Ora siamo pronti a lanciare l'applicazione.
Ciccando su esegui, vedremo la Listbox incrementarsi all'infinito, con un ritardo di due secondi tra un iterazione e l'altra fino a quando non verrà premuto il tasto Ferma.




Da notare che durante l'esecuzione del ciclo infinito, si ha la possibilità di spostare, ridimensionare il Form e quindi poter ciccare su tutti gli oggetti in esso contenuti. Per cui, con questo metodo di programmazione, si elimineranno quelle fastidiose fasi di morte apparente, (ad esempio quando si carica un Recordset molto grande), avendo la possibilità di intervenire sul processo in atto anche annullando l'operazione o uscendo addirittura dall'applicazione.

N.B. Per dubbi e chiarimenti scrivere a federicobarbati@tiscali.it



   Invia il link di questo articolo ad un amico  Invia ad un amico Visualizza la versione stampabile di questo articolo  Stampa Commenta questo Articolo  Commenta Parlane in Chat  Chat   Parlane sul Forum  Forum