Einzelnen Beitrag anzeigen

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