Einzelnen Beitrag anzeigen

Gast
(Gast)

n/a Beiträge
 
#1

Klasse klasse mit mehreren Threads synchronisieren

  Alt 18. Jul 2003, 16:10
Hiho.

Ich schreibe gerade mein ach so beliebtes LoggedOn2 um. Nun habe ich folgendes vor:

Schema der Klasse als Download fuer den Fall der Faelle (den sakura nun auch tatsaechlich schuf )
  • In blau und viereckig sind die Threads
  • in blau und rund sind die Datenstrukturen
  • hellgruen im Hintergrund und mit gruenem Rand ist die Abgrenzung dessen, was die Klasse leisten soll.
  • Gelb, die GUI
  • Rot, das Control (Treeview) identifiziert durch ein Handle!

Folgendermassen:
  • Der MainThread soll den Dispatcher aufrufen und dann in die Nachrichtenschleife (der Anwendung) gehen.
  • Der DispatcherThread startet zuerst den MachineScanThread und dann weitere (in der Unit oder Klasse festlegbare Anzahl) WorkerThreads.
  • Sobald der MachineScanThread das erste Mal die Liste von Rechnern im LAN geholt hat, wird diese Liste an die Klasse rangehangen und der Index (Liste 1 oder 2) vermerkt.
  • Danach werden die WorkerThreads einzeln (vom Dispatcher) beauftragt die einzelnen Rechner jeweils nach eingeloggten Usern zu scannen.
  • Die WorkerThreads melden sich jeweils beim Dispatcher zurueck, sobald sie frei sind. Der Dispatcher verteilt dann weiter anliegende Arbeit.
    Ausserdem wird der Dispatcher bei Rueckmeldung veranlassen, dass der GuiUpdateThread ein Update des Treeview vornimmt.
  • Findet der MachineScanThread nun beim Vergleich der aktuellen Liste mit seiner internen Liste von Rechnern einen neuen, oder vermisst er einen alten, so haengt er die neue Liste rein, updated den Index und gibt die alte Liste frei.
  • Wird die Anwendung beendet, so wird der Dispatcher bei allen Threads die er startete veranlassen, dass sie sich beenden und die Daten freigeben. Dies wuerde im Destructor mit einer der Wait-Funktionen geloest.

Einzig ueber die Sache mit dem Index bin ich mir noch nicht im Klaren ... also bitte keine Kommentare dazu!

Also, meine Frage:
Wie koennte ich die einzelnen Teile sinnvoll und synchronisiert so verbinden, dass ich nicht den Vorteil der Multithreading verliere, dass mir aber andererseits nicht die Bytes hin und wieder nur so um die Ohren fliegen, weil's ne Exception gab?!

Bitte um qualifizierte Antworten. Grosse Teile sind bereits implementiert ... nur fliegt mir hin und wieder ne Exception um die Ohren ... offensichtlich wegen Sync-Problemen.

[edit=sakura]Bild wegen Größe entfernt - Download-Link ist ja vorhanden. Mfg, sakura[/edit]

[edit=Daniel B]Titel korrigiert. Mfg, Daniel B[/edit]
Miniaturansicht angehängter Grafiken
schema.png  
  Mit Zitat antworten Zitat