Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wann bzw. an welcher Position CloseHandle? (https://www.delphipraxis.net/174131-wann-bzw-welcher-position-closehandle.html)

Delphi-Laie 5. Apr 2013 17:06


Wann bzw. an welcher Position CloseHandle?
 
Hallo Delphifreunde!

Zur Abwechslung mal wieder eine fachliche Frage, die ich nicht so recht beantwortet fand: Wann bzw. an welcher Stelle sollte (eigentlich muß) ein Closehandle generell erfolgen? Nur, wenn der Funktionsaufruf erfolgreich war oder immer? Also ein Beispiel anhand eines Prozeßhandles:
Delphi-Quellcode:
var hProcess:THandle;
begin
hProcess:=OpenProcess(PROCESS_SET_INFORMATION,true,0);
if hProcess<>0 then
  begin
  //tue irgendetwas mit dem Prozeßhandle
  closehandle(hProcess) //hier?
  end;
closehandle(hProcess) //oder hier?
end
Ich vermute, daß es immer, also außerhalb des if-Blockes, erfolgen sollte/muß.

Bummi 5. Apr 2013 17:10

AW: Wann bzw. an welcher Position CloseHandle?
 
innerhalb, nur dann hast Du ein gültiges handle zum Schließen.

Delphi-Laie 5. Apr 2013 17:19

AW: Wann bzw. an welcher Position CloseHandle?
 
Danke!

Ergänzung: Ich erlebte allerdings noch nie, daß bei einem fehlgeschlagenen Funktionsaufruf das Closehandle, auf das ungültige Handle angwandt, irgendein merkliches Programmverhalten auslöste, Exception z.B., geschweige denn, Absturz.

Sir Rufo 5. Apr 2013 17:22

AW: Wann bzw. an welcher Position CloseHandle?
 
Das ist wie mit Delphi-Referenz durchsuchenTObject.Free und Delphi-Referenz durchsuchenTObject.Destroy (wobei
Delphi-Quellcode:
CloseHandle
hier mit Delphi-Referenz durchsuchenTObject.Destroy vergleichbar ist).

Ein
Delphi-Quellcode:
SafeCloseHandle
(analog zu Delphi-Referenz durchsuchenTObject.Free) würde so aussehen:
Delphi-Quellcode:
function SafeCloseHandle( hObject : THandle ) : Boolean;
begin
  if ( hObject = 0 ) then
    Exit( True );

  Result := ( CloseHandle( hObject ) <> 0 );
end;

DeddyH 5. Apr 2013 17:26

AW: Wann bzw. an welcher Position CloseHandle?
 
Oder in älteren Delphi-Versionen:
Delphi-Quellcode:
function SafeCloseHandle(hObject : THandle) : Boolean;
begin
  if (hObject = 0) then
    Result := True
  else
    Result := CloseHandle(hObject) <> 0;
end;

Delphi-Laie 5. Apr 2013 17:37

AW: Wann bzw. an welcher Position CloseHandle?
 
Verstehen tue ich Euch zwar nicht so recht, aber plötzlich kam ich auf die Idee zu prüfen, ob CloseHandle einen boolschen Rückgabewert hat. Tatsächlich, hat es: Bei einem gültigen Handle gibt es true, bei einem ungültigen false false. Damit kann ich Bummis Aussage hiermit bestätigen (war mir aber auch vorher schon klar, daß es stimmt).

Danke noch einmal!

Dalai 5. Apr 2013 18:59

AW: Wann bzw. an welcher Position CloseHandle?
 
@Sir Rufo & DeddyH: Eine
Delphi-Quellcode:
procedure
mit einem Rückgabewert? Mit einer
Delphi-Quellcode:
function
geht das besser ;).

MfG Dalai

DeddyH 5. Apr 2013 19:10

AW: Wann bzw. an welcher Position CloseHandle?
 
Jaja, sch**ß C&P, ich korrigier das oben :tongue:

Sir Rufo 5. Apr 2013 19:14

AW: Wann bzw. an welcher Position CloseHandle?
 
Zitat:

Zitat von Dalai (Beitrag 1210212)
@Sir Rufo & DeddyH: Eine
Delphi-Quellcode:
procedure
mit einem Rückgabewert? Mit einer
Delphi-Quellcode:
function
geht das besser ;).

MfG Dalai

Wo siehst denn du da
Delphi-Quellcode:
procedure
:mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz