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