![]() |
TTimer Speicherproblem (EOutOfResource Error)
Hallo,
ich hoffe ich bin in diesem Unterforum richtig mit meiner Frage. Folgendes Problem: Ich habe ein Kleines Programm geschrieben, dass ein externes fernsteuert. Realisiert habe ich das über TTimer. Allerdings stürzt das Programm nach ca. einer Stunde laufzeit ab und erzeugt einen OutofResource Fehler. Ich habe mir im Taskmanager das Programm angeschaut und festgestellt, dass der dem Programm zugwiesenen Speicher stetig steigt. Im folgenden ein Codeausschnitt. Ich hoffe ihr könnt mir weiterhelfen. Die Funktion mit der ich veränderungen im zu kontrollierenden Programm wahrnehme.
Delphi-Quellcode:
function DesktopColor(const x,y: integer): TColor; var c:TCanvas; begin c:=TCanvas.create; c.handle:=GetWindowDC(GetDesktopWindow); result:=getpixel(c.handle,x,y); c.free; end;
Delphi-Quellcode:
Ansonsten habe ich noch ein paar weitere Timer, die sich nacheinander aufrufen.
procedure TForm1.healerTimer(Sender: TObject);
begin if start=true then begin try begin if ((desktopcolor(112,53)<>stringtocolor('$0020790B')))then begin sleep(800); if desktopcolor(141,50)<>stringtocolor('$0039B648')then begin sendkeys('%ß',true); sleep(1700); sendkeys('5',true); sleep(2000); sendkeys('6',true); sleep(1700); sendkeys('7',true); sleep(2000); end else begin sleep (2000); end; end; Meine vermutung ist, dass es irgendwas mit dem handel aus der DesktopColor Funktion zu tun hat. Habt ihr eine Idee? LG. |
Re: TTimer Speicherproblem (EOutOfResource Error)
Zitat:
Delphi-Quellcode:
Setze im Projektquelltext (Projekt --> Quelltext anzeigen) einfach einmal ReportMemoryLeaksOnShutDown auf True, dann bekommst du die beim Beenden des Programms angezeigt. Das geht allerdings erst ab Turbo Delphi / Delphi 2006.
function DesktopColor(const x,y: integer): TColor;
begin Result := GetPixel(GetWindowDC(GetDesktopWindow), x, y); end; Vorher und für mehr Details kannst du FastMM verwenden. Dann noch andere Sachen: Statt Sleep würde ich Delay benutzen, sonst hängt das Programm immer: ![]() Zitat:
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht: ![]() Mehr dazu steht hier: ![]() Zitat:
|
Re: TTimer Speicherproblem (EOutOfResource Error)
danke für die hinweise.
habe sie soweit befolgt und nun auch den ganzen code in einen einzigen timer gepackt. leider besteht das problem weiterhin. ich bin ratlos. |
Re: TTimer Speicherproblem (EOutOfResource Error)
Hallo,
braucht GetWindowDC nicht auch ein ReleaseDC? |
Re: TTimer Speicherproblem (EOutOfResource Error)
Stimmt, siehe Dokumentation:
Zitat:
Delphi-Quellcode:
function DesktopColor(const x,y: integer): TColor;
var DesktopDC: HDC; begin DesktopDC := GetWindowDC(GetDesktopWindow); Result := GetPixel(DesktopDC, x, y); ReleaseDC(DesktopDC); end; |
Re: TTimer Speicherproblem (EOutOfResource Error)
hey danke, auf den ersten blick sieht der speicher super aus,
werde das nun mal länger testen. der korrekte code für die funktion heißt dann:
Delphi-Quellcode:
function DesktopColor(const x,y: integer): TColor;
var DesktopDC: HDC; begin DesktopDC := GetWindowDC(GetDesktopWindow); Result := GetPixel(DesktopDC, x, y); ReleaseDC(GetDesktopWindow,DesktopDC); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
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