AGB  ·  Datenschutz  ·  Impressum  







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

TBitmap ist NICHT threadsave

Ein Thema von Kraisel · begonnen am 13. Jun 2016 · letzter Beitrag vom 18. Jun 2016
 
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#17

AW: TBitmap ist NICHT threadsave

  Alt 16. Jun 2016, 21:18
Abschlusserkenntnisse:

Folgende Aussagen kann ich für XE10.1 und Firemonkey bestätigen:

So, ... und wohl nur so funktioniert es mit TBitmap im Thread einwandfrei. Passt auch zu einigen vorangegangenen Kommentaren.

1) MainTread: TBitmap.Create, dann beliebig auf dem Canvas herummalen
2) MainTread: Bitmap.Map (ReadWrite)
3) SomeThreads: Beliebig "zu Fuß" in den Buffer malen und/oder lesen. (Je Zugriff natürlich mit anderen Threads, falls vorhanden, verriegeln).
4) MainTread: Warten, bis Threads fertig sind, Bitmap.Unmap, und beliebig weiterbenutzen

Ich habe noch einmal ca. 4.5 Millionen TBitmaps (jeweils Zufallgroesse 1:1 .. 1280:800) erzeugt und im threadgetriebenen Stresstest (4 TTasks) 1.2 Tera Pixel verglichen (ca. 8 Stunden).

Das einzige, was man laut meinem Stresstest im Thread machen darf, ist auf die gemapten BitmapData lesend und schreibend zugreifen.

Alles andere macht Probleme und zwar sofort bis "fast nie". Letzteres ist TBitmap.Create/Free und/oder TBitmap.Map/Unmap im Thread. Das geht nur ca. jedes 1000 mal schief und es stimmen einzelne Pixel nicht mehr. Ein später kaum zu findener Fehler.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
 

 

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 22:59 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