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)