vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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
Multithreading 
Autor: CodenameReese
Datum: 15.02.10 22:54

Hallo,
diesmal beschäftigt mich ein etwas komplexeres Multithreading Problem (naja zumindest meines Erachtens ). Es geht genauer gesagt um einen Mainthread (GUI), einen Listenthread (ein Listener der in einer Schleife Daten von einem Programm abfängt) und dann noch jeweils einen Thread für ein eigens erstelltes Control.. zur Vereinfachung des Beispiels gehe ich mal von einem solchen Control aus zB. Picturethread. Wären dann drei Threads...
Das Problem liegt darin das der Picturethread zum Beispiel ein Bild aufgrund von Daten des Listenthread berechnet und auch zeichnet und dieses ja dann an den Mainthread weitergegeben werden muss (da der Mainthread das Control ja schließlich erstellt hat).
Also zuerst fängt der Listenthread Daten ab und soll diese an den Picturethread senden, welcher diese dann verarbeitet und in eine Bitmap zeichnet, diese muss dann schlussendlich im Mainthread in das Control gezeichnet werden... So hatte ich mir das jedenfalls vorgestellt und das halt in einer "Schleife"^^
Mein Ansatz (Beispielcode - leider etwas länger):
Public Class Main
 
    Public Port As Integer
    Public PictureCount As Integer
    Public Pictures(0) As Picture
 
    Private ListenerClass As New Listener(Me)
 
    ' Erstellt das Picture Control
    ' Startet den Listener
 
End Class
 
Public Class Listener
 
    Private ListenThread As Thread
    Private Shared Stat As Boolean 
 
    Private Listener As UdpClient
    Private EndPoint As IPEndPoint
 
    Public Shared ReadOnly Property GeStat() As Boolean
        Get
            Return Stat
        End Get
    End Property
 
    Public Sub StartListener()
 
        Stat = True
 
        Listener = New UdpClient(Port)
        EndPoint = New IPEndPoint(IPAddress.Any, Port)
 
        For i1 = 0 To PictureCount
            Pictures(i1).StartThread()
        Next i1
 
        ListenThread = New Thread(AddressOf Listen)
        ListenThread.Start()
 
    End Sub
 
    Public Sub ExitListener()
 
        Stat = False
 
        Listener.Close()
 
        For i1 = 0 To PictureCount
            Pictures(i1).StopThread()
        Next i1
 
        ListenThread.Abort()
 
    End Sub
 
    Private Sub Listen()
 
    [...] 'Daten empfangen
    Received()
 
    End Sub
 
    Private Sub Received()
 
        For i1 = 0 To PictureCount
            Pictures(i1).Value = newData ' Wert wird übergeben
        Next i1
 
    End Sub
 
End Class
 
Public Class Picture
 
    Private PictureThread As Thread
    Private Val As Boolean
 
    Private ImgOn As Image
    Private ImgOff As Image
 
    Public Property Value() As Boolean
        Get
            Return Val
        End Get
        Set(ByVal value As Boolean)
            Val = value
        End Set
    End Property
 
    Public Sub StartThread()
        PictureThread = New Thread(AddressOf Routine)
        PictureThread.Start()
    End Sub
 
    Public Sub StopThread()
        PictureThread.Abort()
    End Sub
 
    Private Sub Routine()
 
        Try
            While Listener.GetStat = True
                If Me.Value = True Then
                    Me.Image = ImgOn
                Else
                    Me.Image = Nothing
                    Me.BackgroundImage = ImgOff
                End If
            End While
        Catch ex As ThreadAbortException
            Me.Image = Nothing
            Me.BackgroundImage = ImgOff
        End Try
 
    End Sub
 
End Class
Aber so fehlt es an jeglicher Synchronisation... sprich der Picturethread rennt in einer Schleife und wartet nicht auf die Freigabe vom Listenthread.. usw..
Das zeichnen zum Schluss kann ich ja dann irgendwie mit Invoke machen, so das der Mainthread das zeichnet allerdings wird das doch auch problematisch wenn da mehrere so Controls da sind oder?
Hoffe ihr könnt mir mal wieder helfen bin völlig überfordert wie ich das realisieren soll^^
MfG Reese

Beitrag wurde zuletzt am 15.02.10 um 23:01:48 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multithreading1.708CodenameReese15.02.10 22:54
Re: Multithreading1.001CodenameReese15.02.10 23:42
Re: Multithreading949ModeratorRalfE16.02.10 10:36
Re: Multithreading970CodenameReese16.02.10 11:06
Re: Multithreading1.031ModeratorRalfE16.02.10 11:58
Re: Multithreading913CodenameReese16.02.10 20:54
Re: Multithreading926CodenameReese17.02.10 11:24
Re: Multithreading944ModeratorFZelle17.02.10 12:36

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