AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threadklasse mit Event aktualisiert nicht

Ein Thema von Inspur1 · begonnen am 28. Aug 2024 · letzter Beitrag vom 29. Aug 2024
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: Threadklasse mit Event aktualisiert nicht

  Alt 28. Aug 2024, 09:49
vorgeschlagene Änderungen:
Delphi-Quellcode:
uses Classes, System.SyncObjs;

type
  TTestThread = class(TThread)
  private
    FTestProperty: string;
    FOnTest: TNotifyEvent;
    function GetTestProperty: string;
    procedure SetTestProperty(const AValue: string);
  protected
    FCS: TCriticalSection;
    procedure DoTest; virtual;
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    {kann aus einem anderen Thread gelesen und verändert werden}
    property TestProperty: string read GetTestProperty write SetTestProperty;
    {wird im Hauptthread aufgerufen (ermöglicht Zugriff auf die VCL)}
    property OnTest: TNotifyEvent read FOnTest write FOnTest;
  end;

implementation

procedure TTestThread.DoTest;
begin
  if Assigned(FOnTest) then // ???: if not Assigned(FOnTest) then
    FOnTest(self);
end;

constructor TTestThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FTestProperty := 'default';
  FCS := TCriticalSection.Create;
end;

destructor TTestThread.Destroy;
begin
  FCS.Free;
  inherited;
end;

procedure TTestThread.Execute;
begin
  Synchronize(DoTest);
end;

function TTestThread.GetTestProperty: string;
begin
  FCS.Enter;
  try
    Result := FTestProperty;
  finally
    FCS.Leave;
  end;
end;

procedure TTestThread.SetTestProperty(const AValue: string);
begin
  FCS.Enter;
  try
    FTestProperty := AValue;
  finally
    FCS.Leave;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FTest := TTestThread.Create(false);
  FTest.FreeOnTerminate := false;
  FTest.OnTest := MyTest;
  FTest.Resume;
  repeat
    CheckSynchronize(10);
  until FTest.Terminated;
  Caption := FTest.TestProperty;
  FTest.Free;
end;
  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 06:12 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