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