Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

TJPEGImage in Schleife in Thread

  Alt 26. Nov 2003, 17:49
Erstmal möchte ich ein dickes HALLO an die Community los werden!
(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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat