Re: Debuggen von Critical Sections
- From: Matthias Hanft <mh@xxxxxxxx>
- Date: Mon, 14 May 2007 08:31:59 +0200
Hans-Peter Diettrich schrieb:
end (* if myStatus=stOpen: datei geöffnet/angelegt *)else ??????
end;
Das ist natürlich kritisch :-(
Wenn die obere Schleife *nicht* mit myStatus=stOpen verlassen wird, dann
wird der FileStream nicht mehr freigegeben!
Dann wurde er aber auch gar nicht erst angelegt!
Ich würde die Trys anders schachteln:
... until myFileStream <> nil;
Ist ein Objekt denn wirklich nil, wenn es nicht angelegt werden
konnte, weil im Constructor eine Exception auftrat?
try
if myStatus = stOpen then ... [1]
//else??? schon mal dran gedacht?
finally
myFileStream.Free;
end;
Das klappt aber nur dann, wenn ein nicht-erzeugbares Objekt
(Exception im Constructor) wirklich nil zurückliefert. So
deutlich habe ich das IIRC noch nirgendwo gelesen. Ist das
wirklich immer und überall so?
Bei mehrwertigen Status-Typen halte ich es für empfehlenswert, die im
Zweifelsfall nicht mit If auszuwerten, sondern mit Case [...]
Stimmt, das baue ich dann in Version 2.0 noch ein :-)
Gruß Matthias.
.
- Follow-Ups:
- Re: Debuggen von Critical Sections
- From: Heinz Zastrau
- Re: Debuggen von Critical Sections
- From: Hans-Peter Diettrich
- Re: Debuggen von Critical Sections
- References:
- Debuggen von Critical Sections
- From: Matthias Hanft
- Re: Debuggen von Critical Sections
- From: Andreas Koch
- Re: Debuggen von Critical Sections
- From: Matthias Hanft
- Re: Debuggen von Critical Sections
- From: Hans-Peter Diettrich
- Debuggen von Critical Sections
- Prev by Date: Re: Tstrings und IndexOf nicht casesensitive?
- Next by Date: Re: Debuggen von Critical Sections
- Previous by thread: Re: Debuggen von Critical Sections
- Next by thread: Re: Debuggen von Critical Sections
- Index(es):
Relevant Pages
|
Loading