Einzelnen Beitrag anzeigen

CarstenB

Registriert seit: 15. Jun 2007
24 Beiträge
 
Delphi XE5 Professional
 
#1

Problem mit Threading / Störung durch Mausbewegungen

  Alt 26. Mär 2008, 14:16
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
  Mit Zitat antworten Zitat