Hallo Leute,
nachdem ich seit geraumer Zeit hier angemeldet und fleissiger Leser bin habe ich nun ein Problem, welches ich hier zur Diskussion stellen möchte und von dem ich hoffe, dass jemand eine gute Idee hat.
Die Software an der ich arbeite muss u.U. eine ganze Reihe von Bildern laden , welche im PCX-Format vorliegen und von einer
DLL in eine interne Speicherstruktur geschrieben werden. Anschliessend wird mittels der
RGB-Funktion das Ganze in ein TBitMap geschrieben. Das Ganze braucht je nach Anzahl der Bilder relativ lang, was zu der Überlegung führte diese Sache in einen Hintergrundthread zu verfrachten - die Datenstrukturen stehen momentan nicht zur Diskussion.
Gesagt getan - das Ganze scheint auch zu funktionieren, allerdings bereitet mir
eines noch Kopfzerbrechen.
Wenn während dieses Lade/Konvertierungsvorganges z.B. die Maus bewegt wird erscheint beim Öffnen der Bilder eine Fehlermeldung mit "EOutOfRessources" und einem völlig bescheuerten Hinweis
auf nicht existierende Dateien die von Canvas beim Zeichnen in das TImage (in das die Bitmap gehört) ausgelöst wird.
Das wird aber vermutlich "Zufall" sein, dass es gerade dort knallt.
Ich weiss wohl, dass TBitmap in Bezug auf Threads "böse" ist - aber kann das daher kommen? Es wird nur ein Hintergrund-Thread erzeugt, der ein bisschen Kleinzeug, das Laden der PCX-Dateien über die
DLL, sowie die Konvertierung macht und anschliessend endet.
Hätte ich gegebenenfalls eine Möglichkeit da minimalinversiv was zu ändern, sprich ohne das ganze Programm umzubauen?
Den Thread starte ich folgendermaßen:
BeginThread(nil, 0, @LoadPCXData, @ThreadInfo, 0, ThreadID)
ThreadInfo ist ein gepackter record in dem ich einige Daten übergebe, die der Thread benötigt, u.a. auch das Objekt in dem die ganzen Bilddaten abgelegt werden.
Es wäre mir echt eine grosse Hilfe, wenn da jemand eine gute Idee hätte... Besonders ärgerlich ist, dass die Grundfunktionalität ja OK ist, aber eben durch äussere Einflüsse dermassen durcheinander gebracht wird.
Danke im Voraus,
Carsten