AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads und StringList

Ein Thema von IMPEGA · begonnen am 24. Mai 2025 · letzter Beitrag vom 27. Mai 2025
 
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
101 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

AW: Threads und StringList

  Alt 26. Mai 2025, 10:23
Erstmal,
vielen Dank für deine Vorlage.
Leider, bin ich mit der Vorlage noch mehr überfordert. Wie gesagt, Coden ist nur ein Hobby von mir.
Ich wage mich zwar an neue Themen ran, jedoch ist mein Wissen nicht gerade professionell.
Dein Muster müsste ich wieder komplett abarbeiten, viel dazu lernen.
Bei meinem Code verstehe ich das Meiste. Ich weiß zwar nicht, wie man es wirklich korrekt umsetzen soll, verstehen den Code tue ich aber schon.
Das meiste davon habe ich mir nämlich selbst ausgedacht. (Natürlich, mit der freundlichen Unterstützung von Google, und viel Lesen)
Ich bin sehr dankbar für die Vorlage, muss aber auf dem Boden bleiben und in meinen Möglichkeiten eine Lösung suchen.
Wenn es erstmal funktioniert, kann ich versuchen mich weiter zu orientieren.
Dich einfach nur kopieren, ohne Sinn und Verstand, mag ich nicht, möchte es auch nicht.

Also, stelle ich erstmal weitere Fragen zu meinem Code.
1: Darf ich einfach zweite CriticalSection deklarieren ??
2: Wie kann ich das hier besser umsetzen (Idee mit Erklärung, oder kleiner Muster wäre super) Dec(Form1.ActiveThreads); Form1.UpdateLabelActiveThreads;
3: Die StringList erstelle ich nun im Thread, eine pro Job und lösche sie, wen fertig. Gibt es damit Ärger? oder darf ich es so machen?

Delphi-Quellcode:
procedure TURLCheckerThread.Execute;
var
  FErgebnis : TstringList; // --> Frage Nr. 3
  Url : string;
  Http : TIdHTTP;
begin
  Http := TIdHTTP.Create(nil);
    try
      while not Terminated and not FShouldStop^ do
        begin
          Url := '';
          FCS1.Acquire; // --> Frage Nr. 1
            try
              if FUrlList.Count > 0 then
                begin
                  Url := FUrlList[0];
                  FUrlList.Delete(0);
                end;
            finally
              FCS1.Release; // --> Frage Nr. 1
            end;

          if Url = 'then Break;

          Sleep(Random(2000)); {Hier kommt später meine Aufgabe}

          FErgebnis := TStringList.Create; // --> Frage Nr. 3
            try
              try
    // Http.Head(Url);

                FCS2.Acquire; // --> Frage Nr. 1
                  try
                    FErgebnis.Add('OK: ' + Url);
                    FErgebnis.Add('Zweite Zeile');
                    FErgebnis.Add('Dritte Zeile');
                  finally
                    FCS2.Release; // --> Frage Nr. 1
                  end;

                UpdateStatus(FErgebnis); // --> Frage Nr. 3
              except
                on E: Exception do
                  begin
                    FErgebnis.Add('FAIL: ' + Url + ' - ' + E.Message);
                    UpdateStatus(FErgebnis);
                  end;
              end;
            finally
              FreeAndNil(FErgebnis); // --> Frage Nr. 3
            end;

          TThread.Synchronize(nil, procedure
            begin
              Dec(Form1.IdleJobs); // --> Frage Nr. 2
              Form1.UpdateLabelJobs; // --> Frage Nr. 2

              Inc(Form1.JobsFinished); // --> Frage Nr. 2
              Form1.UpdateLabelFinished; // --> Frage Nr. 2
            end);
        end;
    finally
      FreeAndNil(FErgebnis);
      FreeAndNil(Http);

      TThread.Synchronize(nil, procedure
        begin
          Dec(Form1.ActiveThreads); // --> Frage Nr. 2
          Form1.UpdateLabelActiveThreads; // --> Frage Nr. 2
        end);
    end;
end;
Falls ich damit kaum zum Erfolg kommen sollte, bitte auch aufklären warum, dann muss ich neuen Ansatz suchen.
Damit komme ich aber einigermaßen klar, also wäre es schon mein Favorit.
Auch wenns nicht perfekt ist.

.
  Mit Zitat antworten Zitat
 


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 04:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz