AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Klasse klasse mit mehreren Threads synchronisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse klasse mit mehreren Threads synchronisieren

Ein Thema von Gast · begonnen am 18. Jul 2003 · letzter Beitrag vom 20. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
Gast
(Gast)

n/a Beiträge
 
#1

Klasse klasse mit mehreren Threads synchronisieren

  Alt 18. Jul 2003, 15: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
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:18
Ich denke mal, die Exception tritt im Moment auf, wenn die Listen up-to-date gebracht werden. Ich würde vorschlagen, dass Du an der Stelle entweder auf Interfaces wechselst - der Aufwand ist hier u.U. jedoch nicht gerechtfertig, oder Du lässt Deine Threads durch eine CriticalSection laufen, wenn Sie die Liste verändern wollen. Ersteres lässt alle Sorgen über, evtl. in der Zwischenzeit freigegeben Objekte verfliegen.

Vielleicht habe ich Dich aber auch nicht richtig verstanden

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#3

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:19
Dieser Post wurde wegen grammatischer und ausdrücklicher Stilblüten gelä ... ü ... öscht .. *verdammteenglischetastaturhat*
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:23
Ich meinte weniger die Downloadgröße - als die Bildgröße - die sprengt bei einigen Besuchern die Grenzen - ja, es gibt hier noch User mit 800-Pixel Auflösung

Was ist mit dem Rest

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#5

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:23
Meist lande ich in LeaveCriticalSection irgendwo in der NTDLL oder der System32 ... wenn das Programm beendet wird und dann der Debugger zuckt.

Nachtrag:
Wozu gibt es Scrollbars? Wenn sich so jemand das auf seinem Homerechner anschaut, hat der das gleiche Prob
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:25
Zitat von Assarbad:
Lud ich diese Seite vor diesem Edit, war sie 125794 Bytes gross!
Davon sind jetzt 47.646 Bytes für die Seite, der Rest Grafiken, welche eh gecached sind. Damit mach das Bild fast 50% mehr Download aus. Aber wie gesagt, das war nicht der Grund

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:27
Zitat von Assarbad:
Meist lande ich in LeaveCriticalSection irgendwo in der NTDLL oder der System32 ... wenn das Programm beendet wird und dann der Debugger zuckt.
Hm, ich hatte bis jetzt keine Probleme, aber wozu gibt es Mutexes und andere Methoden um uns die Synchronisation schwer zu machen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#8

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:32
LOL. Problem bei Mutexes, die sind leider echte und mit Namen bestueckte Kernelobjekte. Deshalb kann ich sie nicht gebrauchen. Denk mal an, was passiert, wenn ich mehrere Instanzen der Anwendung starte

IMHO Critical Sections oder die InterLocked-Funcs ... was anderes kommt wahrscheinlich nicht wirklich in Frage. Noch ander Ideen?
Haste vielleicht mal selbst nen eigenen Sync-Mechanismus gebastelt?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:35
Zitat von Assarbad:
Haste vielleicht mal selbst nen eigenen Sync-Mechanismus gebastelt?
Ich bin gerade an einer Idee dran, die zwar auch auf dem MS-Prinzip basiert, allerdings auch auf der WinAPI Idee basiert.

Wenn Du trotzdem Mutexes nutzen willst, kannst Du an den Namen die Instance-ID des Programmes ranhängen und schon ist das Problem von MaxInt laufenden Instanzen gelöst

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#10

Re: Klasse klasse mit mehreren Threads syncen ... oh Hülfe

  Alt 18. Jul 2003, 15:40
Hast du jemals deine Instanzenhandles ausgewertet? Die sind alle die Lade-Adresse des Hauptmodules im eigenen Speicherbereich. Meist $400000 (seit Win32 erstmals rauskam ist dies so)

Wenn dann muesste es schon die Thread-ID oder so sein. Aber Mutexe sind ja grade deshalb langsam, weil es Kernelobjekte sind. Es muss der Thread ja in den Kernel-Mode jumpen und wieder zurueck. Das kostet mindestens 800 Zyklen.

Nachtrag:
Rueck mal ein paar konzeptionelle Details zu deinem Ansatz raus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz