AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTimer Speicherproblem (EOutOfResource Error)

Offene Frage von "Periander"
Ein Thema von Periander · begonnen am 5. Apr 2009 · letzter Beitrag vom 6. Apr 2009
Antwort Antwort
Periander

Registriert seit: 27. Sep 2006
16 Beiträge
 
#1

TTimer Speicherproblem (EOutOfResource Error)

  Alt 5. Apr 2009, 13:50
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:
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;
Ansonsten habe ich noch ein paar weitere Timer, die sich nacheinander aufrufen.

Meine vermutung ist, dass es irgendwas mit dem handel aus der DesktopColor Funktion zu tun hat. Habt ihr eine Idee?

LG.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TTimer Speicherproblem (EOutOfResource Error)

  Alt 5. Apr 2009, 14:00
Zitat von Periander:
Meine vermutung ist, dass es irgendwas mit dem handel aus der DesktopColor Funktion zu tun hat. Habt ihr eine Idee?
Da sehe ich nichts verdächtiges, du hast nur viel zu viel Quelltext. Du musst doch nicht extra ein TCanvas erzeugen, nur um dessen Handle als Variable zu verwenden.
Delphi-Quellcode:
function DesktopColor(const x,y: integer): TColor;
begin
  Result := GetPixel(GetWindowDC(GetDesktopWindow), x, y);
end;
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.

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:
http://www.delphipraxis.net/internal...ect.php?t=7355

Zitat von Periander:
if start=true then
Der Vergleich mit true ist nicht nur unlogisch sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
http://www.delphi-forum.de/viewtopic...=548760#548760
Mehr dazu steht hier:
http://www.delphi-treff.de/tutorials...werten/page/4/

Zitat von Periander:
Ansonsten habe ich noch ein paar weitere Timer, die sich nacheinander aufrufen.
Dann hast du beim Konzept vermutlich einiges falsch gemacht. Mit der richtigen Logik braucht man nicht viele Timer.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Periander

Registriert seit: 27. Sep 2006
16 Beiträge
 
#3

Re: TTimer Speicherproblem (EOutOfResource Error)

  Alt 6. Apr 2009, 01:01
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.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: TTimer Speicherproblem (EOutOfResource Error)

  Alt 6. Apr 2009, 01:04
Hallo,

braucht GetWindowDC nicht auch ein ReleaseDC?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TTimer Speicherproblem (EOutOfResource Error)

  Alt 6. Apr 2009, 01:47
Stimmt, siehe Dokumentation:
Zitat von [url=http://msdn.microsoft.com/en-us/library/dd144947.aspx:
Dokumentation[/url]]After painting is complete, the ReleaseDC function must be called to release the device context. Not releasing the window device context has serious effects on painting requested by applications.
Delphi-Quellcode:
function DesktopColor(const x,y: integer): TColor;
var
  DesktopDC: HDC;
begin
  DesktopDC := GetWindowDC(GetDesktopWindow);
  Result := GetPixel(DesktopDC, x, y);
  ReleaseDC(DesktopDC);
end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Periander

Registriert seit: 27. Sep 2006
16 Beiträge
 
#6

Re: TTimer Speicherproblem (EOutOfResource Error)

  Alt 6. Apr 2009, 01:55
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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