AGB  ·  Datenschutz  ·  Impressum  







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

Ein Versuch mit Omnithreadlibrary

Ein Thema von IMPEGA · begonnen am 18. Sep 2020 · letzter Beitrag vom 19. Okt 2020
 
IMPEGA

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

AW: Ein Versuch mit Omnithreadlibrary

  Alt 21. Sep 2020, 07:05
Ich bin noch nicht ganz fertig, allerdings schon sehr müde davon.
Videos auf YT? Zu meinem Thema nicht eins was man als brauchbar bezeichnen kann. Sprich, ja ich habe mehrere auf Englisch geschaut.
Englische bringen auch was, das Problem ist nur, da kann ich gleich Muke dabei hören. Verstehen tue ich vielleicht 10 Prozent.
Ich kann nur das was ich sehe umsetzen.
Dokumentation beinhaltet heutzutage so gut wie gar keine Vorlagen, die man analysieren könnte.
Für einen Anfänger ist es sehr schwer zu Recht zu kommen.
Bitte schreibt mir keine Verweise auf YT oder Emba. Die Hilfe habe ich schon gesucht.

Neuer Versuch.
Das funktioniert zwar schon, allerdings ich verliere einige Ausgaben. Es fehlen Sachen, so als nicht alle Threads geliefert hätten.
Ich habe kein Plan, ob es am Server liegt der nicht antwortet, oder mein Code fehlerhaft ist. Momentan bin ich so überladen mit den Infos dass ich mich schon leicht verliere.

Ich kann es nicht in Echt testen, das ist mir zu riskant, ich habe mir auf Freespace halt eine Liste mit 1000 Datensätzen erstellt.
Darauf greife ich zu und versuche mein Vorhaben zu simulieren. Später wird es local auf dem Server passieren. Das kann ich aber noch nicht testen.

Delphi-Quellcode:
(* uses System.Threading;
  private
     FPool : TThreadpool;  *)

procedure TForm1.Button6Click(Sender: TObject);
var
  Task : ITask;
  Korrektur : string;
  Liste : TStringList;
begin
  Liste := TStringList.Create;
  Liste.LoadFromFile('LocaleDatei.dat');

  if FPool = nil then
    begin
      Fpool := TThreadPool.Create;
      Fpool.SetMaxWorkerThreads(10);
      Fpool.SetMinWorkerThreads(1);
    end;

  TParallel.For(0, Liste.Count - 1, procedure (Index: Integer)
    begin
      Task := TTask.Create(
        procedure
          begin
            if TTask.CurrentTask.Status = TTaskStatus.Canceled then
               exit;
           Korrektur := GetHTTP; // (function GetHTTP : string;) HIER VERBINDE ICH MICH PER GET AUF EINEN SERVER. HOLE EIN SATZ ALS STRING REIN

            if TTask.CurrentTask.Status <> TTaskStatus.Canceled then
              begin
                TThread.Queue(TThread.CurrentThread,
                  procedure
                    begin
                      if Assigned(Memo1) then
                        begin
                          Memo1.Lines.Add(Liste[Index]); // HIER WIRD SCHON FALSCH NUMMERIERT. ICH DENKE ABER WEIL ES NICHT SERIAL LÄUFT
                          Korrektur := StringReplace(Korrektur, 'Alter Wert', 'Neuer Wert' ,[rfReplaceAll, rfIgnoreCase]); //HIER WIRD NOCH MEHR PASSIEREN, DAS DIENNT NUR ALS MUSTER.
                          Memo1.Lines.Add(Korrektur); // HIER WIRD SPETER NOCH EIN UPLOAD GEMACHT. ERSTMAL UNWICHTIG. DIENT KONTROLLE
                        end;
                    end);
              end;
          end);
      Task.Start;
    end, FPool);
end;
Es sind sehr viele kleine Änderungen nötig. Serial dauert es ewig lange. Es muss schon mindestens 50-100 Mal parallel laufen. Am besten wählbar weil die Datenbanken unterschiedlich sind und der Rechner nicht immer unter Volllast laufen soll.
Meine Frage wäre eben ob es in der Form mit den Threads funktionieren kann.
Statt Queue könnte ich glaube ich Synchronize nehmen. Keine Ahnung was davon in meinem Fall besser ist.
Bitte um erneute Rückmeldung.

Geändert von IMPEGA (21. Sep 2020 um 07:52 Uhr)
  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 11:06 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