| |

VB.NET - Ein- und UmsteigerKlasse für MultiThreading | |  | Autor: Schü | Datum: 06.08.10 14:16 |
| Hallo Leute!
Brauche mal Eure kompetente Hilfe.
Ich habe mir eine Basis-Klasse für Multithreading Arbeiten erstellt, die folgendes machen sollte:
- Klasse läuft als seperater Thread
- nimmt eine beliebige Anzahl an Objekten in einer Liste auf
- startet die Verarbeitung der einzelnen Objekte nach verfügbarer freier Rechenleistung
- verteilt die Arbeiten wiederum auf weitere Threads, je nach Vorgabe oder Anzahl
der Prozessorenkerne (parallel???)
- gibt Ereignisse zur Fertigstellung der Arbeiten an oder sammelt die Ergebnisse
in einer Ausgabeliste
Einigen Code (z.B. das mit OnEvent()) habe ich aus diversen Foren oder Beispielprojekten, welche ich versucht habe zu verstehen und zu erweitern. Nachdem ich nun die ersten Testläufe duchgeführt habe, das Thema Threading aber für mich absolut neu ist, habe ich Angst, irgendwo im Detail Fehler gemacht zu haben, weil ich nicht ganz im Detail durchsteige.
Ich hoffe Ihr könntet Euch das mal anschauen wo da die Säge klemmen könnte. Ich bin dankbar für jede Meinung und Kritik.
Schü
Hier mein Code: (habe absichtlich auf Imports-Anweisungen verzichtet)
Ich teile den Code auf und schiebe einen Teil in die 1. Antwort (Begrenzug des Beitrags auf 5kB)
Module mThreading
''' <summary>
''' Klasse zum Kpseln diverser Multithreading-Aufgaben
''' Erstellt von Jörg Schützner im August 2010
''' </summary>
''' <typeparam name="T"></typeparam>
''' <remarks></remarks>
Public MustInherit Class MultiTaskProcessor(Of T)
Inherits ThreadWrapperBase
Public Event Completed As EventHandler(Of MTP_ThreadEventArgs)
Public Event Paused As EventHandler(Of MTP_ThreadEventArgs)
Public Event Continued As EventHandler(Of MTP_ThreadEventArgs)
Public Event Abborted As EventHandler(Of MTP_ThreadEventArgs)
Public Event AbbortRequested As EventHandler(Of MTP_ThreadEventArgs)
Public Event Started As EventHandler(Of MTP_ThreadEventArgs)
Public Event SingleTaskCompleted As EventHandler(Of MTP_ThreadEventArgs)
Public Event SingleTaskStarted As EventHandler(Of MTP_ThreadEventArgs)
Public Event SingleTaskAbborted As EventHandler(Of MTP_ThreadEventArgs)
Protected MustOverride Sub DoWork(ByVal Obj As T)
Protected mPauseWaitHandle As New System.Threading.ManualResetEvent( _
True)
Protected mInputListeWaitHandle As New _
System.Threading.ManualResetEvent(True)
Protected mPaused As Boolean = True
Protected mListClose As Boolean
'Listen...
Protected mInputList As New Queue(Of T)
Protected mOutputList As New Queue(Of T)
Protected mErrorList As New Queue(Of T)
Protected mWorkTime As TimeSpan = TimeSpan.Zero
Protected mStartTick As Date
Protected mUseOutputList As Boolean = False
Protected mInputListWaitTimeout As Integer = 500
Protected mOutputListWaitTimeout As Integer
Protected mCPU_Count As Integer
Protected mAnzTasks As Integer
Protected mStartTimeout As Integer
Protected mMaxTaskCount As Integer
Protected mStartRequested As Boolean = False
Protected mNoDoubleItems As Boolean 'Keine Doubletten in der Inputliste
' zulassen
Private mSingleThreads As New List(Of SingleTaskProcessor)
'TODO: OutputListe integrieren
'TODO: reine Rechenzeit ermitteln
'TODO: Ermöglichen, das die Reihenfolge der Eingabe auch Reihenfolge
' der Ausgabe ist, falls gewünscht
Protected Sub OnEvent(ByVal Sender As Object, ByVal e As EventArgs, _
ByVal [Event] As System.Delegate)
Dim Fired As Boolean = False
If [Event] IsNot Nothing Then
For Each singlecast As System.Delegate In _
[Event].GetInvocationList
Fired = False
Try
Dim syncInvoke As _
System.ComponentModel.ISynchronizeInvoke = CType( _
singlecast.Target, _
System.ComponentModel.ISynchronizeInvoke)
If syncInvoke IsNot Nothing AndAlso _
syncInvoke.InvokeRequired Then
Fired = True
syncInvoke.Invoke(singlecast, New Object() {Sender, _
e})
Else
Fired = True
singlecast.DynamicInvoke(New Object() {Sender, e})
End If
Catch ex As System.Reflection.TargetInvocationException
If Not Fired Then
singlecast.DynamicInvoke(New Object() {Sender, e})
End If
End Try
Next
End If
End Sub
'...... Hier komt dann der Rest........ |  |
 | 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 |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere 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
|
|