AGB  ·  Datenschutz  ·  Impressum  







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

Threadübergreifende Bitmap

Ein Thema von FirstTry · begonnen am 1. Okt 2015 · letzter Beitrag vom 4. Okt 2015
Antwort Antwort
FirstTry

Registriert seit: 1. Okt 2015
10 Beiträge
 
#1

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 14:53
Alle Win32-Ressourcen (Und TCanvas, TBitmap verwenden solche) sind nur im Erzeugenden Thread gültig. Alle Aktionen mit diesen müssen im erzeugenden Thread erfolgen.
Und die VCL baut hier (aus verständlichen Gründen) keinen Threadschutz um den Zugriff herum.
Die sporadischen Fehlermeldungen sind eigentlich nur Zufällig funktionierende Zugriffe.
Ich verwende nur FBild in beiden Threads, und wenn ich irgendwas mit FBild mache rufe ich die Methode im Thread immer mit synchronize auf, also müsste das "eigentliche" zeichnen doch auch im GUI-Thread passieren oder nicht?


Schon funktioniert es!
Nein selbst dann funktioniert es nicht!
Und zusätzlich habe ich dann eine (kleine) Kreuzreferenz zwischen Unit1 und 2, Zeichne unnötigerweise auf ein Zwischenbitmap, da ich von der GUI ja nicht neuzeichnen sollte und abgesehen davon ist es echt nicht schön von einer Klasse auf die "höhere" Klasse zuzugreifen.

Zufälligerweise.
Jedes Zeichnen aus dem Thread auf im Hauptprogramm erzeugte Formulare kracht früher oder später.
Nein, es funktioniert nicht einmal.
Das sehe ich auch so, deshalb möchte ich die Zeichnung nur "irgendwie" (aber ordentlich!) rüberkriegen...

Danke für eure Hilfe, leider hat keiner einen funktionierenden Lösungsansatz bishher liefern können.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 14:56
Alle Win32-Ressourcen (Und TCanvas, TBitmap verwenden solche) sind nur im Erzeugenden Thread gültig. Alle Aktionen mit diesen müssen im erzeugenden Thread erfolgen.
Und die VCL baut hier (aus verständlichen Gründen) keinen Threadschutz um den Zugriff herum.
Die sporadischen Fehlermeldungen sind eigentlich nur Zufällig funktionierende Zugriffe.
Ich verwende nur FBild in beiden Threads, und wenn ich irgendwas mit FBild mache rufe ich die Methode im Thread immer mit synchronize auf, also müsste das "eigentliche" zeichnen doch auch im GUI-Thread passieren oder nicht?
Das TBitmap hat aber auch Win32-Ressourcen/handles "on board". Könnte also auch Problematisch sein.
Probier doch mal statt TBitmap TPngImage.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
FirstTry

Registriert seit: 1. Okt 2015
10 Beiträge
 
#3

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 15:04
TPngImage gibts erst ab XE7 wenn ich das richtig sehe.
Ich arbeite noch mit der Steinzeitversion 7
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 16:04
TPngImage gibts erst ab XE7 wenn ich das richtig sehe.
Ich arbeite noch mit der Steinzeitversion 7
Es gibt glaube ich eine CC-Download bei Emba für PNGs in älteren Delphi-Versionen.
Falls du TMS einsetzt, diese haben eine eigene Implementierung (haben die OpenSource-Version lizenziert bevor Emba diese gekauft hat).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 16:04
TPngImage sollte seit Delphi 2009 enthalten sein.
Das Original von Gustavo Daud sollte auch mit Delphi 7 funktionieren, wenn du es noch irgendwo findest.
  Mit Zitat antworten Zitat
FirstTry

Registriert seit: 1. Okt 2015
10 Beiträge
 
#6

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 16:46
Habe den Link gefunden
Code:
http://www.snehovapohotovost.cz/authorsmore.php?id=6929
Also liegt der Fehler in der Verarbeitung von WindowsHandles?
Es kann doch nicht sein, dass mein Fehler nicht "normal" lösbar ist... Sicher dass es am Bitmap liegt?
Könnte es anstatt mit Synchronize mit irgendetwas anderem klappen?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 17:06
Ich habe selber auch grade so etwas probiert, bekomme ständig "Out of resources". Siehe auch hier:
http://www.delphipraxis.net/108000-t...tml#post735086

Ohne im Quelltext zu wühlen, dafür aber die Suchmaschine meines Vertrauens zu befragen, sieht es (zumindest für Laien wie mich) wirklich danach aus, als könnte man mit Vcl.Graphics.TBitmap nur im Hauptthread arbeiten?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Threadübergreifende Bitmap

  Alt 2. Okt 2015, 17:14
Habe den Link gefunden
Code:
http://www.snehovapohotovost.cz/authorsmore.php?id=6929
Also liegt der Fehler in der Verarbeitung von WindowsHandles?
Es kann doch nicht sein, dass mein Fehler nicht "normal" lösbar ist... Sicher dass es am Bitmap liegt?
Könnte es anstatt mit Synchronize mit irgendetwas anderem klappen?
Es ist meine Vermutung das es hieran liegt. Und wenn es daran liegt dann muss man halt den (aufwändigeren) Weg gehen und keine Win32-GDI-Ressourcen über Threadgrenzen hinweg zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 08:20
Also ich habe in die While-not-terminated-Schleife ein Sleep eingebaut und die Instantiierung des Bitmaps in den Konstruktor des Threads verlagert. Klappt.
  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 21:57 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 by Thomas Breitkreuz