vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
... Code ... 
Autor: Schü
Datum: 06.08.10 15:51

 ''' <summary>
        ''' Hauptaufgabe
        ''' </summary>
        ''' <remarks>Hier werden entsprechend den Vorgaben die gewünschte 
        ' Anzahl an parallelen Threads erstellt.
        ''' Diese rufen dann jeweils die zu überschreibende Routiene DoWork() 
        ' auf.</remarks>
        Protected Overrides Sub DoTask()
            'in Schleife Tasks einfüttern...
            Do
                'Wait Handle für Pause:
                If Not mPauseWaitHandle.WaitOne(0, False) Then
                    If mDebugMode Then Debug.WriteLine(mThreadName & "::" & _
                      "Haupthread wurde angehalten!")
                End If
                mPauseWaitHandle.WaitOne()
 
                If mRequestStop Then Exit Do
 
                If mInputList.Count > 0 Then
 
                    'weitere Elemente vorhanden. Max Anz testen...
                    Dim bBreak As Boolean = False
                    SyncLock mSingleThreads
                        If mSingleThreads.Count < mAnzTasks Then
                            'neuer Task möglich...
 
                            Dim Task As New SingleTaskProcessor(Me, _
                              mInputList.Dequeue(), mIsBackground, Nothing)
                            mSingleThreads.Add(Task)
                            mSingleThreads(mSingleThreads.Count - 1).Start()
                        Else
                            'Warten, bis nächster SingleTask fertig ist...
                            bBreak = True
                        End If
                    End SyncLock
 
                    If bBreak Then mInputListeWaitHandle.WaitOne()
                Else
                    'KeineElemente (mehr)
                    If mListClose Then Exit Do
 
                    'Verarbeitung  aufschieben?
                    If mInputListWaitTimeout > 0 Then
                        If mDebugMode Then Debug.WriteLine(mThreadName & "::" & _
                          "InputListe " & mInputListWaitTimeout.ToString & "ms" & _
                          "aufschieben...")
                        System.Threading.Thread.Sleep(mInputListWaitTimeout)
                    End If
 
                    'Fortfahren blockieren, bis neue Elemente vorhanden sind...
                    mInputListeWaitHandle.Reset()
                End If
            Loop Until mRequestStop
 
            'Warten, bis alle SingleThreads fertig...
            Dim Anz As Integer
            Do
                mInputListeWaitHandle.WaitOne()
                SyncLock Me
                    Anz = mSingleThreads.Count
                End SyncLock
            Loop Until Anz = 0
        End Sub
 
        ''' <summary>
        ''' Einzelner SingleThread ist abgeschlossen
        ''' </summary>
        ''' <param name="Sender"></param>
        ''' <param name="Obj"></param>
        ''' <remarks></remarks>
        Protected Overridable Sub m_SingleTaskCompleted(ByVal Sender As _
          SingleTaskProcessor, ByVal Obj As T)
            If mDebugMode Then Debug.WriteLine(mThreadName & "::" & _
            "SingleTaskCompleted " & Obj.ToString)
 
            Dim e As New MTP_ThreadEventArgs(Obj, Sender, False)
 
            'Element aus Zwischenliste entfernen...
            SyncLock mSingleThreads
                If mSingleThreads.Contains(Sender) Then mSingleThreads.Remove( _
                  Sender)
            End SyncLock
 
            If mUseOutputList Then
                'Obj in Ergebnisliste einfügen...
                mOutputList.Enqueue(Obj)
                'TODO: OutputListe erwecken!
                'mOutputListeWaitHandle.Set()
            Else
                'Fertigstellung mittels Invoke() direkt signalisieren...
                OnEvent(Me, CType(e, EventArgs), SingleTaskCompletedEvent)
            End If
 
            If e.Cancel Then
                'Abbruch gewünscht
                Me.RequestStop()
            Else
                'neuer SingleThread-Liste ist freigeworden. Neuer Thread kann 
                ' jetzt erstellt werden.
                mInputListeWaitHandle.Set()
            End If
        End Sub
        ''' <summary>
        ''' Einzelner SingleThread ist gestarted worden
        ''' </summary>
        ''' <param name="Sender"></param>
        ''' <param name="Obj"></param>
        ''' <param name="Cancel"></param>
        ''' <remarks>vorzeitiger Abbruch noch möglich</remarks>
        Protected Overridable Sub m_SingleTaskStart(ByVal Sender As _
          SingleTaskProcessor, ByVal Obj As T, ByRef Cancel As Boolean)
            If mDebugMode Then Debug.WriteLine(mThreadName & "::" & _
            "SingleTaskStart: " & Obj.ToString)
 
            'Fertigstellung signalisieren...
            Dim e As New MTP_ThreadEventArgs(Obj, Sender, False)
            OnEvent(Me, CType(e, EventArgs), SingleTaskStartedEvent)
            If e.Cancel Then Me.RequestStop()
        End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Klasse für MultiThreading2.503Schü06.08.10 14:16
Re: Klasse für MultiThreading1.739Schü06.08.10 14:19
Re: Klasse für MultiThreading1.789ModeratorDaveS06.08.10 14:50
Re: Klasse für MultiThreading2.043Schü06.08.10 15:34
... Code ...1.888Schü06.08.10 15:48
... Code ...1.761Schü06.08.10 15:49
... Code ...1.872Schü06.08.10 15:51
... Code ...1.735Schü06.08.10 15:51
... Code ...1.808Schü06.08.10 15:52
... Code ...1.852Schü06.08.10 15:52
... Code ...1.762Schü06.08.10 15:53
... Code ...1.833Schü06.08.10 15:54
... Code ...1.698Schü06.08.10 15:56
... Code ... Ende1.783Schü06.08.10 15:57
Re: Klasse für MultiThreading1.755ModeratorRalfE06.08.10 19:17
Re: Klasse für MultiThreading1.730Schü07.08.10 15:35
Re: Klasse für MultiThreading1.735ModeratorDaveS07.08.10 16:04
Re: Klasse für MultiThreading1.802ModeratorRalfE07.08.10 16:33
Re: Klasse für MultiThreading1.729Schü07.08.10 17:17
Link zum Projekt2.003Schü09.08.10 11:30
1. Korrektur1.712Schü10.08.10 07:55
2. Korrektur1.729Schü10.08.10 08:26
3. Korrektur1.721Schü11.08.10 09:49

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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