AGB  ·  Datenschutz  ·  Impressum  







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

EOutOfResource + Thread + Bitmap + Assign

Ein Thema von silver-moon-2000 · begonnen am 3. Mär 2013 · letzter Beitrag vom 3. Mär 2013
Antwort Antwort
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

AW: EOutOfResource + Thread + Bitmap + Assign

  Alt 3. Mär 2013, 13:36
Danke für Deine Antwort,

Wenn ich ReportMemoryLeaksOnShutdown := True verwende, poppt kein Fenster auf, das mich darüber informiert, wie schlecht ich programmiere, also gehe ich davon aus, zumindest keine allzu offensichtlichen Speicherlöcher zu hinterlassen

Seltsam, sobald ich die Synchronize-Methode auskommentiere, läuft das Programm "stundenlang" fehlerfrei:
Delphi-Quellcode:
procedure TDisplayHandler.Execute;
begin
  while not Terminated do
  begin
    if not FIsDone then
    begin
      DoCreate;
     // Synchronize(SyncEvent); //wenn das auskommentiert ist, läuft das Programm
      FIsDone := True;
    end
    else
      Sleep(20);
  end;
end;
Mit anderen Worten: Das Bitmap wird nach wie vor "bemalt", jedoch nicht mehr per Assign in das Image der MainForm "kopiert",
das schließt mMn einen Fehler bei der "Speicherzumüllung" aus.
Also muss mMn ein Fehler bei der Übergabe an die GUI passieren, obwohl der Zugriff darauf synchronized ist?
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: EOutOfResource + Thread + Bitmap + Assign

  Alt 3. Mär 2013, 13:45
Ah halt, er sagt ja auch „System Resources“ und nicht „Memory“.

Da fällt mir ein, ich hatte glaube ich vor gar nicht all zu langer Zeit ein ähnliches Problem – ich bin mir nicht mehr 100%ig sicher, aber ich glaube es war so, dass GDI-Objekte immer einem bestimmten Thread angehören. D.h. du kannst sie nicht im einen Thread erzeugen und in einem anderen verwenden, bzw. es kann dann zu Fehlern kommen. Genau das tust du aber, weil der contructor des Threads noch im Hauptthread ausgeführt wird.

Schieb die Erzeugung von FBitmap mal vom constructor in die Execute-Methode (und die Freigabe natürlich auch).


Gerade im fraglichen Projekt, wo der Fehler bei mir auftrat, noch mal nachgeschaut. Vergiss das mit dem constructor. Du musst einfach nur Canvas.Lock/Unlock vor und nach deinen Zeichenoperationen aufrufen. Das war des Rätsels Lösung.

Edit²: Hat zumindest bei mir gereicht.

Geändert von Namenloser ( 3. Mär 2013 um 14:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.228 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: EOutOfResource + Thread + Bitmap + Assign

  Alt 3. Mär 2013, 13:50
... aber ich glaube es war so, dass GDI-Objekte immer einem bestimmten Thread angehören. ...
Genau das ist es. Windows-GDI-Ressourcen sind Thread-Affine. D.h. auf sie darf nur im erzeugenden Thread zugegriffen werden. Ansonsten kracht irgendwo irgendwas.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#4

AW: EOutOfResource + Thread + Bitmap + Assign

  Alt 3. Mär 2013, 14:18
Gerade im fraglichen Projekt, wo der Fehler bei mir auftrat, noch mal nachgeschaut. Vergiss das mit dem constructor. Du musst einfach nur Canvas.Lock/Unlock vor und nach deinen Zeichenoperationen aufrufen. Das war des Rätsels Lösung.

Edit²: Hat zumindest bei mir gereicht.
Anscheinend nicht nur bei Dir...
Seltsam, seltsam...

... aber ich glaube es war so, dass GDI-Objekte immer einem bestimmten Thread angehören. ...
Genau das ist es. Windows-GDI-Ressourcen sind Thread-Affine. D.h. auf sie darf nur im erzeugenden Thread zugegriffen werden. Ansonsten kracht irgendwo irgendwas.
OK, wieder was gelernt.

Auf jeden Fall vielen Dank für Eure Antworten,
andere Baustellen rufen mich jedoch , da jetzt diese anscheinend begradigt wurde
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  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 15:41 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