Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Systemhandles laufen hoch... (https://www.delphipraxis.net/144547-systemhandles-laufen-hoch.html)

Mavarik 10. Dez 2009 12:59


Systemhandles laufen hoch...
 
Hallo Zusammen...

Meine Systemhandles laufen hoch, wenn mein Programm (Servicedienst) arbeitet.

Wenn ich die Anzahl der Handles intern Abfrage mit :

Delphi-Quellcode:
Function HandleCount:Integer;
var
  Pid : Thandle;
  g,
  U  : integer;
begin
  Pid := GetCurrentProcess;

  try
    g := GetGuiResources(Pid,GR_GDIOBJECTS);
    u := GetGuiResources(Pid,GR_USEROBJECTS);
  finally
    Closehandle(Pid);
  end;

  result := g+u;
end;
Bleibt die Zahl (ca. 55) jedoch konstant. Übersehe ich etwas?

Grüsse Mavarik :gruebel:

Angel4585 10. Dez 2009 13:05

Re: Systemhandles laufen hoch...
 
Also moment.. im Taskmanager werden mehr Handels angezeigt als du im Programm auslesen kannst?
Oder die Funktion bringt in nem Dienst ständig wachsende Zahlen, in nem normalen Programm bleiben die Zahlen jedoch konstant?

himitsu 10. Dez 2009 13:08

Re: Systemhandles laufen hoch...
 
GetGuiResources gibt nur die GUI-Handles zurück
und da dürften FileHandles und andere nichgrafische Handles nicht enthalten sein.

Mavarik 10. Dez 2009 13:18

Re: Systemhandles laufen hoch...
 
Zitat:

Zitat von Angel4585
Also moment.. im Taskmanager werden mehr Handels angezeigt als du im Programm auslesen kannst?
Oder die Funktion bringt in nem Dienst ständig wachsende Zahlen, in nem normalen Programm bleiben die Zahlen jedoch konstant?

Nein... Im Taskmanager laufen die "System Handles" immer weiter hoch...

In meinem Programm welchers ein Systemdienst ist bleiben diese (gemäß meiner Abfrage) konstant...

Zitat:

Zitat von himitsu
GetGuiResources gibt nur die GUI-Handles zurück
und da dürften FileHandles und andere nichgrafische Handles nicht enthalten sein.

OK Fileshandles ist mir klar, "nichtgrafische" Handles... Haste da mal ein Beispiel...

Ich habe Events, Mutex Handles aber die können es nicht sein...
HDC, HDesk, HWINSTA und HWND aber die müssten ja enauso wie Bitmaps bei meiner Abfrage dabei sein, oder ?

Mavarik :stupid:

Delphi-Laie 10. Dez 2009 13:56

Re: Systemhandles laufen hoch...
 
Zitat:

Zitat von Mavarik
OK Fileshandles ist mir klar, "nichtgrafische" Handles... Haste da mal ein Beispiel...

Prozeßhandles z.B. - der Taskmanager zeigt deren Anzahl an (s.o.).

Dezipaitor 10. Dez 2009 14:01

Re: Systemhandles laufen hoch...
 
Die Winsta und Desktophandles werden vom System öfters offen gehalten. Ich habe das auch schon bemerkt. Da hilft kein Closehandle.
Vermutlich werden diese irgendwie noch intern von Systemfunktionen verwendet.
TV hat das Problem übrigens auch und das ist in C++ geschrieben.

Du kannst im Processexplorer mit Strg+H die offenen Handles genauer ansehen.

Das ganze ist allerdings nicht weiter schlimm, wenn die Anwendung nicht ewig laufen soll (Sonst einfach die Anwendung neustarten).

Mavarik 10. Dez 2009 14:20

Re: Systemhandles laufen hoch...
 
Zitat:

Zitat von Dezipaitor
Die Winsta und Desktophandles werden vom System öfters offen gehalten. Ich habe das auch schon bemerkt. Da hilft kein Closehandle.

Grrr... Unnötig zu sagen, dass DU mal wieder die Lösung hattest...
Pro ScreenShot 2x Desktop 1x WindowStation

Bei 20 FPS macht das schon 3600 Handles/Minute...

Zitat:

Zitat von Dezipaitor
Das ganze ist allerdings nicht weiter schlimm, wenn die Anwendung nicht ewig laufen soll (Sonst einfach die Anwendung neustarten).

Tja das ist aber mein Systemdienst und der sollte eigenlich lifetime/Windows Uptime im Speicher bleiben...

Auch warten hilft nix... Nur Terminate...

Mavarik :wall:

himitsu 10. Dez 2009 14:27

Re: Systemhandles laufen hoch...
 
Du könntest dir diese Handles doch auch nur einmal und nur bei Änderungen neu holen.

Mavarik 10. Dez 2009 14:35

Re: Systemhandles laufen hoch...
 
Zitat:

Zitat von himitsu
Du könntest dir diese Handles doch auch nur einmal und nur bei Änderungen neu holen.

Ich muss ja genau um die Änderungen fest zu stellen die WindowsStation und den Desktop aufmachen...

Mavarik

Mavarik 10. Dez 2009 14:45

Re: Systemhandles laufen hoch...
 
PS:

Der CloseDesktop(hDesktop) und CloseWindowStation(hWinstation) liefern ein

GetLastError = 170 ; ERROR_BUSY

zurück...

Mavarik :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Seite 1 von 2  1 2      

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