@Frank
Den Thread im Suspended-Mode zu starten macht irgendwie keinen Sinn, da der doch schon durch den Event wartet.
Ich würde auch nicht
TThread.Terminate
überschreiben, sondern
Tthread.TerminatedSet
, denn das ist schon als
virtual
deklariert und somit zum Überschreiben gedacht.
Die Klasse selber würde ich noch als
abstract
deklarieren (nur wegen der Dokumentation), denn ohne Ableitung ist die ja so nicht lauffähig.
Einfach so die
Exception wegfangen ist auch nicht gerade schön, und wenn fangen, dann nur so:
Delphi-Quellcode:
try
MyExecute;
except
// Nur spezielle Exceptions fangen, die MyExecute bewusst ausgelöst hat
// Alle anderen unvorhergesehenen werden durchgereicht
on E:MyExecuteException do
begin
end;
end;
Das hier
Delphi-Quellcode:
try
E_Event.Free;
except
end;
ist auch unsauber. Wenn meine Klasse nicht funktioniert, dann möchte ich die Fehler um die Ohren geschlagen bekommen.
Bei dem
MyExecute
und
MyFree
sieht das etwas anders aus, da hierfür nicht die Klasse
TMyThread
zuständig ist.
Aber was passiert denn, wenn in
MyExecute
ein übler Fehler passiert (StackOverflow)?
Der Code kann immer wieder ausgeführt werden, ohne jeden Hinweis auf den Fehler.
Das
Terminate
im Destructor ist überflüssig (wird schon implizit vom
inherited
aufgerufen ... ach nee, bei dir ja nicht
)