Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Threads - Methode .. nicht in Basisklasse gefunden

  Alt 26. Jan 2011, 00:44
@SyntaxXx

Wenn du Delphi-Code postest, dann benutze bitte die Delphi-Tags
für sonstigen Code die Code-Tags

sonst krieg ich hier Augenkrebs

Code:
procedure SiehtDoofAus;
begin
  // Ja ganz doof
end;
Delphi-Quellcode:
procedure SiehtVielBesserAus;
begin
  // Ja viel besser
end;
Nach über 100 Beiträgen solltest du das eigentlich wissen und es ist lediglich ein Knöppeschen weiter
(und eine anständige Formatierung/Einrückung sollte auch drin sein)

Nun zu deiner Frage:
  1. In der Execute-Methode hast du keine Abbruchbedingung definiert until Terminated;
  2. Thread ist als lokale Variable in der procedure definiert. Ausserhalb der procedure kann auf diese nicht zugegriffen werden und beim erneuten Aufrufen der procedure ist der Wert undefiniert (auf jeden Fall nicht mehr mit einem vernünftigen Wert gefüllt)

Deklariere in der Form eine entsprechende Thread-Variable
Delphi-Quellcode:
type
  TFooForm = class( TForm )
  ...
  private
    Thread : MyThread;
  ...
  end;
und den Rest so
Delphi-Quellcode:
procedure MyThread.Execute;
begin
  repeat
    Synchronize(Form1.FillMemo);
  until Terminated;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Assigned( Thread ) then
    begin
      Thread.Terminate;
      Thread := nil;
    end
  else
    begin
      Thread := MyThread.Create(true);
      Thread.Priority := tpLowest;
      Thread.FreeOnTerminate := true;
      Thread.Resume;
    end;
end;
Jetzt wird mit jedem Klick auf den Button1 der Thread gestartet und auch wieder angehalten
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