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
Seite 3 von 4     123 4      
Der schöne Günther
Online

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

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.195 Beiträge
 
Delphi 10.4 Sydney
 
#22

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
 
#23

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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 09:16
Also ich habe in die While-not-terminated-Schleife ein Sleep eingebaut und die Instantiierung des Bitmaps in den Konstruktor des Threads verlagert. Klappt.
Im Konstruktor des Threads bist du ja noch im Hauptthread und noch nicht im Thread-Thread.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 09:39
Nur das Sleep verbessert die Situation. Die Bitmap Instanz kann man erzeugen wo man möchte.

Problematisch ist nicht TBitmap an sich, sondern TBitmap.Canvas . Da wird intern etwas Globales verwendet und das fällt einem auf die Füße.

Ein TCanvas.Lock /TCanvas.Unlock sollte eigentlich helfen, aber leider auch nur bedingt. Irgendwann kommt man in einen Deadlock, wenn das zu schnell von unterschiedlichen Threads erfolgt.

Darum bringt die Verwendung von Sleep eine Verbesserung.

Wenn man eine echte Lösung haben möchte, dann sollte man TBitmap im Thread vergessen und dort auf TBitmap32 von Graphics32 setzen.

Zu dieser Erkenntnis kommt man auch hier: How threadsafe is TBitmap
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 11:59
Problematisch ist nicht TBitmap an sich, sondern TBitmap.Canvas . Da wird intern etwas Globales verwendet und das fällt einem auf die Füße.
Das dieses Canvas ein Integrales Bestandteil von TBitmap ist sehe ich diese Trennung als Spitzfindigkeit.
Aber was solls mit TBitmap32 oder TPngImage gibts genügend Alternativen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#27

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 12:06
Problematisch ist nicht TBitmap an sich, sondern TBitmap.Canvas . Da wird intern etwas Globales verwendet und das fällt einem auf die Füße.
Das dieses Canvas ein Integrales Bestandteil von TBitmap ist sehe ich diese Trennung als Spitzfindigkeit.
Aber was solls mit TBitmap32 oder TPngImage gibts genügend Alternativen.
Nicht wirklich, denn es ist absolut safe z.B. mit TBitmap.Scanline oder TBitmap.Pixels zu arbeiten (was über Scanline geht).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#28

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 14:20
Nur das Sleep verbessert die Situation. Die Bitmap Instanz kann man erzeugen wo man möchte.
Das stimmt nicht. Erst, als die Bitmap im Konstruktor erzeugt wurde, funktionierte es.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 14:29
Nur das Sleep verbessert die Situation. Die Bitmap Instanz kann man erzeugen wo man möchte.
Das stimmt nicht. Erst, als die Bitmap im Konstruktor erzeugt wurde, funktionierte es.
Ich habe es mit DX Seattle ausprobiert und da braucht es nur das Sleep (um augenscheinlich stabil zu laufen).

Da aber Thread und TBitmap nicht so richtig zusammen passen, sollte man das getrost mit einem Sperrvermerk belegen und im Thread auf eine der genannten Alternativen setzen. Ein Sleep in einem Thread ist eher Makulatur und keine stabile Grundlage. Das ist nur legitim um solche Timingprobleme zu lokalisieren.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#30

AW: Threadübergreifende Bitmap

  Alt 3. Okt 2015, 14:38
OK...
Schon funktioniert es!
Zufälligerweise.
Jedes Zeichnen aus dem Thread auf im Hauptprogramm erzeugte Formulare kracht früher oder später.
Deswegen ruft man ja Syncronize auf...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 16:30 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