Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Die Frage aller Fragen (Sammlung): „Ist das Thread-Safe?“

  Alt 4. Jul 2014, 10:57
@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 )
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