Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Ist es möglich über TParallel eine Procedure zum ausführen zu übergeben?

  Alt 5. Apr 2018, 17:33
Hallo himitsu,

über diesen Ansatz versuche ich gerade TThreadProcedure in eine TQueue zu schreiben mit der Absicht, dass die Proceduren sequenziell ausgeführt werden können.
Doch die Proceduren werden nicht ausgeführt. Kannst du erkennen warum?



Delphi-Quellcode:

  private
    { Private-Deklarationen }
    var ProcQuere: TQueue<TThreadProcedure>;
    procedure ExecuteQueue;
    procedure Methode1InQueue;
    procedure Methode2InQueue;
  public
    { Public-Deklarationen }
  end;

  
  
procedure TForm1.FormCreate(Sender: TObject);
begin
  ProcQuere := TQueue<TThreadProcedure>.Create;
  ExecuteQueue;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ProcQuere.Clear;
  ProcQuere.Free;
end;

procedure TForm1.btMethode1Click(Sender: TObject);
begin
  Methode1InQueue;
end;

procedure TForm1.btMethode2Click(Sender: TObject);
begin
  Methode2InQueue;
end;


procedure TForm1.ExecuteQueue;
begin
  TThread.CreateAnonymousThread(procedure
  var proc: TThreadProcedure;
  begin
    while not Application.Terminated do begin //Endlosschleife bis App beendet wird
      if ProcQuere.Count <> 0 then
      begin
        proc := ProcQuere.Dequeue();
        proc();
      end;
    end;
  end).Start;

end;
  
procedure TForm1.Methode1InQueue;
begin
  ProcQuere.Enqueue(procedure
    begin
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          mo1.Lines.Add('Methode1InQueue');
        end);
    end);

end;

procedure TForm1.Methode2InQueue;
begin
  ProcQuere.Enqueue(procedure
    begin
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          mo1.Lines.Add('Methode2InQueue');
        end);
    end);

end;

Gruß Kostas

Geändert von Kostas ( 6. Apr 2018 um 14:12 Uhr)
  Mit Zitat antworten Zitat