Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TThread.Queue landet nicht in der Queue

  Alt 19. Feb 2014, 16:47
Es gibt auch noch eine ganz billige Methode ohne Thread. Dabei wird der Code am Ende der Methode/Prozedur ausgeführt:
Delphi-Quellcode:
  ILater = interface
    ['{CF68F59B-FA67-4915-B1DB-F3DAA1A3D929}']
  end;

  TLater = class( TInterfacedObject, ILater )
  private
    FProc : TProc;
  protected
    constructor Create( AProc : TProc );
  public
    class function Execute( AProc : TProc ) : ILater;
    destructor Destroy; override;
  end;

{ TLater }

constructor TLater.Create( AProc : TProc );
begin
  inherited Create;
  FProc := AProc;
end;

destructor TLater.Destroy;
begin
  FProc( );
  inherited;
end;

class function TLater.Execute( AProc : TProc ) : ILater;
begin
  Result := TLater.Create( AProc );
end;
allerdings werden die in umgekehrter Reihenfolge der Erstellung abgearbeitet
Delphi-Quellcode:
procedure TForm1.Button2Click( Sender : TObject );
begin
  ListBox1.Items.Add( 'first' );

  TLater.Execute(
      procedure
    begin
      ListBox1.Items.Add( 'second' );
    end );

  TLater.Execute(
      procedure
    begin
      ListBox1.Items.Add( 'third' );
    end );

  ListBox1.Items.Add( 'fourth' );
end;
und in der Listbox steht
Code:
first
fourth
third
second
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat