Einzelnen Beitrag anzeigen

MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 07:31
Delphi-Version: 2005
Ich stehe gerade vor folgendem "Problem". Ein wirkliches Problem ist es nicht, da ich Alternativen habe, es zu umgehen, trotzdem würde ich gerne wissen, warum mein erster Ansatz so nicht funktioniert.

Ich habe eine eigene Thread-Klasse geschrieben, die (logischerweise) von TThread abgeleitet ist. Ich möchte gerne die Methode TThread.Terminate aus dem public-Bereich überschreiben, weil bei deren Aufruf intern in meiner eigenen Thread-Klasse noch etwas mehr passieren soll, als nur das FTerminated-Feld auf True zu setzen. Aber auch das soll natürlich weiterhin passieren. Daher habe ich TThread.Terminate folgendermaßen überschrieben:
Delphi-Quellcode:
interface

type
  TMeinThread = class(TThread)
  private
    ...
  public
    procedure Terminate; // override hier ja nicht nötig, da nicht virtual
  end;

implementation

procedure TMeinThread.Terminate;
begin
  // TThread.Terminate aufrufen, um FTerminated auf True zu setzen
  inherited;

  // anschließend noch alles weitere machen
  ...
end;

end.
Das Problem ist, dass TThread.Terminate scheinbar übersprungen wird und von dem inherited nicht aufgerufen. Ein Breakpoint innerhalb von TThread.Terminate wird grün dargestellt und deshalb beim Debuggen auch nie erreicht. Woran liegt das? Kann man TThread.Terminate nicht überschreiben und falls nicht, warum?

Danke für die Aufklärung
  Mit Zitat antworten Zitat