VBMThread11.DLL
von Krool
VBMThread11.DLL
Mit dieser DLL lässt sich unter VB6 Multithreading realisieren. Die einzelnen Threads können erstellt bzw. gestartet, pausiert, abgebrochen, terminiert und in ihrer Priorität geändert werden. Der Thread selbst läuft per Implements in einer Form oder Klasse als Interface.
Klasse Thread
Es gibt eine öffentlich erstellbare Komponente, die Thread-Klasse:
Eigenschaften
DebugMode As Boolean: Gibt an, ob die BackgroundProcedure im Hauptthread läuft oder wirklich in einem neuen Thread. Um in der IDE debuggen zu können, muss dieser Wert auf True stehen.
hThread As Long: Gibt den Handle vom Thread zurück. Ist dieser ungleich 0, dann existiert ein Thread. Diese Eigenschaft ist der Default.
Priority As ThreadPriorityConstants: Damit kann die Prioriät für einen Thread definiert werden.
Suspended As Boolean: Damit kann der Thread pausiert werden.
ThreadID As Long: Gibt eine von Windows vergebene interne ID für den Thread zurück.
Ereignisse
PriorityChanged (OldPriority As ThreadPriorityConstants, NewPriority As ThreadPriorityConstants): Tritt auf, wenn die Priority-Eigenschaft verändert wurde.
SuspendedChanged(): Tritt auf, wenn die Suspended-Eigenschaft verändert wurde.
Methoden
Create(Owner As IThread, [Key As String]) As Boolean: Erstellt einen neuen Thread. Der Owner muss eine Form oder Klasse sein, die IThread implementiert hat. Der Key-Parameter sollte definiert werden, wenn eine Form oder Klasse mehrere Threads besitzen wird.
Cancel(): Sendet eine Abbruchaufforderung. Das bedeutet nicht, dass der Thread sofort beendet ist. Es liegt am Entwickler selbst, ob er in der BackgroundProcedure dem Wunsch nachgehen wird oder nicht.
Terminate([Wait As Boolean]) As Boolean: Erzwingt einen Abbruch. Diese Art des Abbruches sollte vermieden werden.
Interface IThread
Im IThread Interface läuft der eigentliche Prozess ab:
Methoden
BackgroundProcedure(Key As String, StatusCallback As IThreadStatusCallback, Data As ThreadData): In dieser Methode wird alles programmiert, was im Thread ausgeführt werden soll. Der Key-Parameter kann helfen, zwischen mehreren Threads zu unterscheiden. Da diese Methode asynchron läuft (da eigener Thread), sind einige Regeln zu beachten. Es sollten nur Objekte angesprochen werden, die auch hier erstellt wurden. Auf Steuerelemente oder auf exklusive Klassen wie App (z.B. App.Path) muss verzichtet werden. Mithilfe von StatusCallback kann jedoch auf diese zugegriffen werden. Es können auch Objekte hin und her verschoben werden. Auch APIs oder öffentliche Variablen können ohne Probleme verwendet werden.
StatusCallback(Key As String, Argument1 As Variant, Argument2 As Variant): Diese Methode wird nur vom Entwickler angestoßen. Wenn in der BackgroundProcedure StatusCallback.Raise aufgerufen wird, kommt diese Methode zum Einsatz. Wenn diese Methode aufgerufen wird, dann ist der Thread pausiert und läuft im Hauptthread.
Complete(Key As String, Data As ThreadData): Wenn der Thread fertig ist oder abgebrochen wurde, wird diese Methode aufgerufen. Der Data-Parameter enthält weitere Informationen.
Klasse ThreadData
Im IThread-Interface gibt es ein Hilfsobjekt namens ThreadData, welches Informationen enthält bzw. gesetzt werden können:
Eigenschaften
Canceled As Boolean: Gibt Auskunft, ob der Thread normal fertig gelaufen ist oder abgebrochen wurde. Es liegt am Entwickler selbst, ob der Wert aussagekräftig ist (siehe Demoprojekt).
CancellationPending As Boolean: Der Thread sollte bald möglichst beendet werden. Dieser Wert ist True, wenn in der Thread-Klasse die .Cancel()-Methode aufgerufen wurde.
DebugMode As Boolean: Gleicher Wert wie in der Thread-Klasse, allerdings nur lesend.
Tag As Variant: Für Zusatzinformation, beispielsweise ein Erfolgswert, der in der Complete-Methode ausgewertet werden kann.
Download
Die ZIP-Datei enthält die DLL und ein Beispielprojekt.
Download VBMThread11.dll mit Quellcode und Beispielprojekt
Sollten Sie Fragen oder Probleme haben, wenden Sie sich bitte an den Autor oder den Betreuer dieser Rubrik.