Thema: Delphi Extra Thread starten

Einzelnen Beitrag anzeigen

Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
618 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Extra Thread starten

  Alt 5. Apr 2022, 08:15
Tja, natürlich habe ich auch die Sychronize Sache gesehen, aber was soll ich hier sychronisieren?
Den Zugriff auf dein Fenster. Denn das dürfen Threads nicht einfach anfassen.

Einfach runtergeschrieben und nicht getestet, aber dafür vermutlich mehr wie es gedacht ist.

Delphi-Quellcode:
unit MainFormUnit;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.WinXCtrls, Vcl.ExtCtrls;

type
  TheThread = class(TThread)
  private
    procedure DoIt;
  public
    procedure Execute; override;
  end;

type
  TMainForm = class(TForm)
  Indicator: TActivityIndicator;
  CounterLabel: TLabel;   
  StartThreadBtn: TButton;
  procedure StartThreadBtnClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

// *************************************************
procedure TheThread.DoIt;
begin
  MainForm.Indicator.Animate := true;
end;

procedure TheThread.Execute;
begin
  Synchronize(DoIt);
end;
// *************************************************
procedure TMainForm.StartBtnClick(Sender: TObject);
var
  Thread: TheThread;
  I: integer;

begin
  try
    // Thread starten
    Thread := TheThread.Create(True);
    Thread.FreeOnTerminate := true;
    Thread.Resume;
    // eine reine Beschäftigungsaufgabe für den Hauptthread
    for I := 0 to 100 do
    begin
      MainForm.CounterLabel.Caption := I.tostring;
      Application.ProcessMessages;
      Sleep(500);
    end;
    MainForm.Indicator.Animate := false;
  except
    on E:Exception do
    begin
      MainForm.Indicator.Animate := false;
    end;
  end;
end.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat