AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Ist es möglich über TParallel eine Procedure zum ausführen zu übergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Kostas · begonnen am 3. Apr 2018 · letzter Beitrag vom 6. Apr 2018
 
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.115 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 5. Apr 2018, 16: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 13:12 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 12:34 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