AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [AnfängerFrage] Einsatz für CriticalSections?
Thema durchsuchen
Ansicht
Themen-Optionen

[AnfängerFrage] Einsatz für CriticalSections?

Ein Thema von silver-moon-2000 · begonnen am 22. Sep 2008 · letzter Beitrag vom 22. Sep 2008
Antwort Antwort
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

[AnfängerFrage] Einsatz für CriticalSections?

  Alt 22. Sep 2008, 19:09
Hallo zusammen...

erstens... wurde vor wenigen Tagen etwas am Forum geändert, denn ich habe zur Zeit massive Probleme, das Forum anzusehen oder Posts zu lesen, also sorry, falls meine Frage schon beantwortet wurde, aber die Suche funktioniert (zumindest für mich) zur Zeit nicht.

zweitens: mein Problem

ich gebe eine Reihe von URLs in eie stringlist ein (oder droppe sie genauer gesagt vom Browser aus in das Memo-Feld, hinter welchem ein StringList steht).
Der Analyze-Thread wertet den ersten Eintrag aus dieser StringListe aus und schreibt diesen danach abwechselnd in die ObjectListen zweier Download-Threads (nach dem mod 2 = 0 Prinzip) und löscht den ersten Eintrag der StringList.

Die DownloadThread lesen den ersten Eintrag aus ihrer Objectlist aus, downloaden die datei, die durch diesen Eintrag (im Grunde eine weitere URL) referenziert wird und löschen den ersten Eintrag aus ihrer Liste.

Sowohl AnalyzeThread als auch die beiden DownloadThreads laufen seit Programmstart

Also (verkürzt) etwa so:

"Hauptprogramm"
Delphi-Quellcode:
procedure fmDropZone.Drop[...]
[...]
  AnalyzeThread.FSL.Append(URL);
[...]
AnalyzeThread:
Delphi-Quellcode:
  while not terminated do
  begin
[...]
    if (FIdentCount mod 2 = 0) then
    begin
      OL1.Add(TFlickr.Create);
      OL1.Last.Analyze(FSL.Strings[0], FIdentCount);
    end
    else
    begin
      OL2.Add(TFlickr.Create);
      OL2.Last.Analyze(FSL.Strings[0], FIdentCount);
    end;
    Inc(FIdentCount);
    FSL.Delete[0];
    Synchronize(UpdateDisplay);
  [...]
  end;
end;
wobei OL1 / OL2 die ObjectListen der DownloadThreads sind und FSL die StringListe, aus der der AnalyzeThread liest.

DownloadThread:
Delphi-Quellcode:
  while not Terminated do
  begin
    if FOL.Count > 0 then
    begin
      Flickr := FOL.Items[0];
[...]
      if UrlDownloadToFile(nil,
           PChar(Flickr.FImageURL),
           PChar(Path + Flickr.FImageFileName), 0, nil) = S_OK then
      begin
        FOL.Delete(0);
        Synchronize(UpdateDisplay);
      end;
    end;
[...]
  end;
Nach langer Vorrede jetzt meine Frage: Das riecht für mich nach CriticalSections an zwei Orten:

Da, wo ich dem AnalyzeThread aus dem Hauptprogramm etwas in die StringList FSL schreibe und ich im AnalyzeThread daraus lese und einen Eintrag lösche

Da, wo ich im AnalyzeThread in die ObjectLists OL1 & OL2 der DownloadThread schreibe und in den DownloadThreads daraus lese und einen Eintrag lösche

Habe ich das so richtig verstanden? Wäre für alle Antworten (außer den vollkommen unproduktiven) dankbar
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: [AnfängerFrage] Einsatz für CriticalSections?

  Alt 22. Sep 2008, 22:24
HI,

die Critical Sections sollten so stimmen. Als Faustregel, würde ich sagen, gilt: Dort wo du Threadübergreifende Befehle ausführst, solltest du CriticalSections einführen. Den Rest mit dem Analysieren sollte zur Geschwindigkeitsverbesserung nicht in der CS stehen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:43 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