Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| try { ... ... } catch (ExceptionTyp1 e) { ... } catch (ExceptionTyp2 e) { ... } catch (ExceptionTyp3 e) { ... } finally { // clean up } |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| try ... ... except on E: ExceptionTyp1 do begin ... end;
on E: ExceptionTyp2 do begin ... end;
on E: ExceptionTyo3 do begin ... end; end; |
da Delphi nur ein Finally ODER ein Except akzeptiert (nicht beides
zusammen wie bei Java), muss man sich einwenig mit der "ExceptObject"-Funktion
behelfen, welche das ggw. Exception-Objekt (E, e) zurückgibt, allerdings
als TObject-Typ.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| try ... ... finally ...
if (ExceptObject is ExceptionTyp1) then begin ... end;
if (ExceptObject is ExceptionTyp2) then begin ... end;
if (ExceptObject is ExceptionTyp3) then begin ... end; ... end; |
Ruditschka hat folgendes geschrieben: |
Interruptedexception ist dann wohl die Art der exception. Aber welche ist das in Delphi? |
Diese Exception entsteht, wenn ein Thread z.B. auf die
Freigabe einer gesperrten Resource wartet (wait) oder auf andere Weise blockiert (in deinem Fall z.B. 10 ms lang schlafen), sich selbst in dem Zeitraum aber nicht auf einen Abbruch prüfen kann. Wenn dann irgendwo durch die Methode "interrupt" abgebrochen wird, wird diese
Exception geworfen und der Thread kann entsprechend darauf reagieren...
In Delphi lässt sich das nicht so einfach 1:1 übernehmen, da die Threads
dort anders implementiert sind...
Thread.Sleep() wirkt sich auf den aufrufenden Thread aus. d.h. dein Stück Code macht nichts anderes als 10 millisekunden zu warten um anschließend fortzufahren...
Falls dabei der Thread beim nichts-tun unterbrochen wird, springt er
in die Exceptionbehandlung, macht allerdings nichts (verschweigt
das Vorkommen) und fährt fort mit der Ausführung...
Je nachdem wieviel Mühe du dir geben willst, dürfte auch "Sleep(10);"
in Delphi reichen... kenne aber den restlichen Code nicht...
daher Angaben ohne Gewähr..