Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TJPEGImage in Schleife in Thread (https://www.delphipraxis.net/12409-tjpegimage-schleife-thread.html)

dizzy 26. Nov 2003 17:49


TJPEGImage in Schleife in Thread
 
Erstmal möchte ich ein dickes HALLO an die Community los werden! :hi:
(Bin nämlich ganz ein frischer Frischling hier...)

Und damit ihr euch nicht zu lange mit Begrüßungsfloskeln langweilen müsst, habe ich auch direkt eine Frage. Die bezieht sich auf einen meiner Threads von delphi-groups, nur habe ich den Eindruck, dass dort keinem mehr was dazu einfällt (ist auch kein alltägliches Problem...), und meiner einer total auf'm Schlauch steht.

http://www.delphi-groups.de/YaBBSe/i...threadid=18036

Kurzeschreibung, damit ihr nicht den Riesenthread oben ganz durchackern müsst:
In meinem Programm werden in einer Schleife sehr schnell hintereinander *.jpg-Bilder mit "TJPEGImage.LoadFromFile" gelesen, und dann einem Bitmap übergeben. Das ganze soll dazu dienen eine große Menge an jpeg's miteinander zu vergleichen (in meinem Fall gut 13.000 jpegs...).

Da der Vorgang schon etwas Zeit in Anspruch nimmt und die Kiste sehr lange lahm legt, habe ich mir mal TThread angeschaut, und mein (bis dahin klaglos funktionierendes Programm) mit einem hübschen 2. Thread versehen, in dem die Vergleiche ablaufen.

Nur spuckt mir TJPEGImage da kräftig in die Suppe :(
Und zwar, sobald man das Programm zu Laufzeit etwas "ärgert" (sprich: Resizen, draufklicken, rumschieben), bekomme ich die Fehlermeldung: "Für diese Operation steht nicht genügend Speicher zur Verfügung".
Die Krux ist: Das Teil lief vorher (als es noch alles im Mainthread lief), und mit der Splittung in 2 Threads habe ich keinerlei Änderungen an dem Lade-/Suchverfahren vorgenommen.
Das Programm belegt im Speicher selten mehr als 10MB, und trotzdem hauts mich irgendwann raus...

Nach längerer "Auskommentier-Session" habe ich dann TJPEGImage als Fehlerquelle ausgemacht. Sobald ich (nahezu kompletter Quelltext unter obigem Link!) die Zeilen "jpg.LaodFromFile(sowieso)" rauslasse rennt das Programm wie 'ne eins.

Dann hab ich's mal mit TMemoryStream versucht, da TJPEGImage auch ein "LoadFromStream" bietet, aber das Symptom war das gleiche. Auch ein kleiner "Sleep(100)" nach dem Laden des jpegs, um etwas Zeit fürs dekomprimirern zu lassen, half kein bischen; zumal das auch unlogisch gewesen wäre, da es ja genau so, nur halt im MainThread, gelaufen ist. Sogar eine ganze Nacht durch...


Weiss da wohl einer von euch, warum mich TJPEGImage in nem Thread nicht mag?

Ich danke schonmal kräftig im Voraus!


Herzlichsten,
dizzy

neolithos 26. Nov 2003 19:59

Re: TJPEGImage in Schleife in Thread
 
1. die schlechte Nachricht:

- TJPEGImage ist nicht Thread-Sicher
- bei mir äußert sich das indem er ab und zu Bilder ausläßt (nicht vollständig lädt)
- abstürze gab es noch keine

2. eine gute Nachricht

das Problem wurde hier schon mal genannt und auch eine alternative Komponente angeprisen bei der es funktionieren soll.

dizzy 26. Nov 2003 21:41

Re: TJPEGImage in Schleife in Thread
 
Mist, sowas hab ich befürchtet... Ich kann aber leider mit der Suche (die ich tatsaächlich auch vorm Fragen mal konsultiert habe ;)) nichts in diese Richtung finden. Mit "threadsicher" alleine sind's nur ca. 10 Thread (höhö, auch Threads...), und keiner hat irgendwas mit TJPEGImage oder dergleichen zu tun :|

Könntest du, oder jemand anderes, wohl einen kleinen netten Link zeigen? Ich such mich seit Tagen dumm mit dieser Sache. Zumal es ja, wenn man diese Kompo vereinzelt einsetzt, problemlos klappt. Nur in der Menge, und so fix hintereinander haut das nicht hin. Blöder Fehler, schwer zu finden :wall:

Bin für so ziemlich alle Alternativen offen!


Heissen Dank schonmal und nochmal!
gruss,
dizzy


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 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