Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#1

Variabel viele Threads erstellen

  Alt 1. Jun 2024, 22:18
Delphi-Version: 12 Athens
Hallo Zusammen,

ich mit Threads leider noch nicht sicher, daher habe ich eine Frage zur Rückgabe von Ergebnissen.

Ich möchte Abfragen in mehreren Threads ausführen.

Da ich nicht weiß, wieviele Threads benötigt werden, möchte ich diese zur Laufzeit erstellen. Ich habe es wie folgt versucht, aber leider gibt es einen Fehler, wenn ich die Threads erstellen möchte...

Delphi-Quellcode:
{ TMyThread_Actually_wLeistung_Main }

procedure TMyThread_Actually_wLeistung_Main.Execute;
var Logic: TLogic;
      RowsWeeks: TRows;
      I: integer;
      MywLeistungThreads: Array of TMyThread_Actually_wLeistung_MT;
      ThreadsCompleted: boolean;
begin
   inherited;
   Logic:= TLogic.Create;
   fWriteSingleResults:= WriteRowsResult;
   Try
      //KWs und Daten zu KWs errechnen
      RowsWeeks:= Logic.GetWeekDates(fVonDate, fBisDate);
      //Threads erstellen
      for I := 0 to Length(RowsWeeks[0]) -1 do begin
         MywLeistungThreads[I].Create(true);
         MywLeistungThreads[I].fMaschinenId:= fMaschinenId;
         MywLeistungThreads[I].SG_Name:= fSG_Name;
         MywLeistungThreads[I].MaschinenId := fMaschinenId;
         MywLeistungThreads[I].VonDate := StrToDate(RowsWeeks[1,I]);
         MywLeistungThreads[I].BisDate := StrToDate(RowsWeeks[2,I]);
         MywLeistungThreads[I].WritewLeistungSingleRows := fWriteSingleResults;
         MywLeistungThreads[I].Resume;
      end;
      //Auf Ergebnisse warten
      {MsgWaitForMultipleObjects(   }
      ThreadsCompleted:= false;
      while ThreadsCompleted = false do begin
         ThreadsCompleted:= true;
         for I := 0 to Length(fRows_wLeistung[0]) -1 do begin
            if fRows_wLeistung[1,I] = 'then begin
               ThreadsCompleted:= false;
            end;
         end;
         Sleep(500);
      end;
      Synchronize(procedure
                  begin
                     if Assigned(fWritewLeistung_Press) then begin
                        fWritewLeistung_Press(fSG_Name, fMaschinenID, fCols_wLeistung, fRows_wLeistung);
                     end;
                  end);
   Finally
      Logic.Free;
  End;
end;
Die Zeile MywLeistungThreads[I].Create(true); löste den Fehler aus und der Meldung nach zu urteilen kann er den Thread nicht erstellen...
Kann mir jemand sagen, was der Fehler ist?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat