| |

VB.NET - FortgeschritteneGrundlagen des Threading | |  | Autor: ralf_oop (Moderator) | Datum: 28.08.04 19:18 |
| Da öfters Fragen über das Threading gestellt wurden, hier die grundlegenden Informationen zur Verwendung von Threads.
Als erstes sollte man eine Prozedur haben, die relativ lange braucht, um seine Aufgabe auszuführen (also relativ rechenintensiv). Hier eine sehr sinnvolle Version
Sub Zählen()
Dim i As Integer
For i = 1 To 10000
Console.WriteLine("Hallo Welt zum {0}-ten Mal", i)
Next
End Sub
Zweitesmuss man eine Instanz der Thread-Klasse mit der Prozedur, die ausgeführt werden soll, erstellt werden:
Dim Thread As New Threading.Thread(AddressOf Zählen) Jetzt kann man den Thread starten:
Thread.Start() Beendet werden kann der Thread mit Abort(). Dies löst eine ThreadAbortException aus. Damit wird signalisiert, das der Thread
beendet werden soll. Diese Exception kann abgefangen werden, um evtl. abschließende Aufgaben (z.B. eine Datei schließen) noch
auszuführen. Hier ein kleines Beispiel:
Shared Sub Zählen()
Dim i As Integer
Try
For i = 1 To 10000
Console.WriteLine("Hallo Welt zum {0}-ten mal.", i)
Next
Catch ex As ThreadAbortException
' Hier Aufräumarbieten einfügen
Return
End Try
End Sub
Shared Sub main()
Dim Thread As New Threading.Thread(AddressOf Zählen)
Thread.Start()
' irgendwelche Aufgaben, die den Thread beenden wollen
Thread.Abort()
' Wenn man jetzt den Thread wieder starten möchte, wird eine Exception
' ausgelöst
End Sub Threads kann man mit Suspend() anhalten. Allerdings wird der Thread nicht sofort angehalten, sondern erst, wenn ein so
genannten sicherer Punkt erreicht ist. Dieser wird vom .NET Framework festgelegt. Um eine Thread wieder auszuführen verwendet
man die Resume()-Methode. Mit Sleep() kann man den Thread für einen bestimmten Zeitraum (in Millisekunden) angehalten werden.
' Thread für eine Sekunden anhalten
Thread.Sleep(1000) Mit Slepp(0) kann man übrigens ein Umschalten zwischen den Thread erreichen.
Falls man auf das Ende eines anderen Threads warten will, kann man dies mit der Join-Methode erreicht werden. Denkbar wäre
dies, wenn ein Thread Daten ließt und der Hauptthread solange wartet, bis alle Daten gelesen worden.
Um auf den aktuellen Thread zuzugreifen, gibt es die CurrentThread-Eigenschaft der Thread-Klasse, die ein Thread-Objekt
zurückgibt.
Dim Hauptthread As Threading.Thread = Threading.Thread.CurrentThread Threads haben Eigenschaften, wovon die folgenden am wichtigsten sind:
IsBackground = Gibt an, ob der Thread ein Hintergrundthread ist. Ein noch laufender Thread verhindert normalerweise, dass ein
Programm beendet wird. Ein Hintergrundthread wird beendet, wenn der Prozess in dem sie laufen beendet wird.
Name = Name des Threads
Priority = Die Priorität des Threads wird vom Scheduler verwendet um zu entscheiden, wie viel Rechenzeit ein Thread bekommt.
Es gibt 5 mögliche Werte: Highest (meiste Rechenzeit), AboveNormal, Normal (Standart), BelowNormal und Lowest (wenigste Rechenzeit).
ThreadState = Gibt den Zustart des Threads an. Folgende Werte existieren:
Unstarted - Thread ist noch nicht gestartet worden
Runnig - Thread läuft
WaitSleepJoin - Thread schläft oder wartet auf einen anderen Thread
Suspended - Thread wurde angehalten
Aborted - Thread wurde abgebrochen
Dies wären die Grundlagen zum Thema Threading. Morgen werde ich zu den Synchronisationsproblemen kommen.
Ralf |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|