Tag Leute,
Vorgeschichte:
ich habe ein Anwendung in der mehrere große Bilder geladen werden. Da sie allerdings nur quasi als verkleinerte Vorschau zu sehen sind, möchte ich nun die Bilder in einem Thread laden und in dem Thread dann ein kleines Thumbnail erstellen. Diese Thumbnails werden dann (hoffentlich) viel schneller vom UI-Prozess geladen und die Anwendung fühlt sich nicht so lahm an.
Problem:
PEBKAC. Spaß beiseite. Mein Programm stürzt immer ab oder hängt sich auf. Ganz selten scheint es auch mal funktioniert zu haben. Irgendetwas läuft also bei Bitmap.FillRect nicht so wie es soll. Wenn ich die Zeile 52 auskommentiere, dann läuft das Programm ohne Probleme. Ebenso funktioniert der Code wunderbar wenn ich ihn 1:1 vom Main-Thread ausführen lasse.
Was mache ich falsch? Wo ist der Fehler?
Ich bin für jeden Hinweis dankbar!
Liebe Grüße.
[gelöst] Bitmap.FillRect in Thread führt zu Crash
-
- Beiträge: 38
- Registriert: Di 18. Nov 2014, 22:50
- OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
- CPU-Target: 64Bit
[gelöst] Bitmap.FillRect in Thread führt zu Crash
- Dateianhänge
-
Beispielprojekt-ThreadBitmapFillRectCrash.zip
- (2.53 KiB) 147-mal heruntergeladen
Zuletzt geändert von TerribleCode am Di 19. Feb 2019, 19:23, insgesamt 1-mal geändert.
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Bitmap.FillRect in Thread führt zu Crash
Theo hat eine Thumbnail Komponente geschrieben, vielleicht hilft dir das?
Thread dazu: viewtopic.php?f=29&t=3929
Source: https://github.com/theo222/lazarus-thumbviewer
Thread dazu: viewtopic.php?f=29&t=3929
Source: https://github.com/theo222/lazarus-thumbviewer
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Re: Bitmap.FillRect in Thread führt zu Crash
TBitmap bzw. Canvas Zugriff ist generell nicht Threadsafe afaik.
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Bitmap.FillRect in Thread führt zu Crash
Threadsafe kannst du die Klassen aus fcl-image verwenden; diese greifen nicht auf das Widgetset zu.theo hat geschrieben:TBitmap bzw. Canvas Zugriff ist generell nicht Threadsafe afaik.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 38
- Registriert: Di 18. Nov 2014, 22:50
- OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
- CPU-Target: 64Bit
Canvas Zugriff sind offenbar nicht Threadsafe / Problem gelö
Scheint eine sehr mächtige Komponente zu sein. Leider kann ich mein Lazarus nicht neu kompilieren, lazarus.pp schmeißt mir immer einen fatalen Fehler. Das scheint aber ein Ubuntu-only Problem zu sein...sstvmaster hat geschrieben:Theo hat eine Thumbnail Komponente geschrieben, vielleicht hilft dir das?
Auch wenn ich deinen Tipp zu schätzen weiß, wäre es mir doch lieber die Ursache zu finden, damit mir dieser Fehler in Zukunft nicht nochmal auf die Füße fällt.
Außerdem brauche ich von der ganzen Komponente nur einen sehr kleinen Teil, den ich mir dann lieber selbst programmiere. So lerne ich noch was dabei.
Also totaler Noob habe ich leider keine Ahnung was es heißt wenn etwas (nicht) Threadsafe ist, aber offenbar hast du Recht, denn:theo hat geschrieben:TBitmap bzw. Canvas Zugriff ist generell nicht Threadsafe afaik.
Damit funktioniert es wunderbar. Vielen Dank Socke!Socke hat geschrieben:Threadsafe kannst du die Klassen aus fcl-image verwenden; diese greifen nicht auf das Widgetset zu.