Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 14. Apr 2014, 01:10
Generell liegt es wohl daran, dass FMX-Framework erst komplett initialisiert sein muss, damit der Code funktioniert.

...

Den komplett geänderten Source habe ich mal angehängt zum Testen
OK, habe mal Dein geändertes Projekt geladen. Das geht zwar nun ohne OLEInitialize, allerdings werden immer 3-4 Bilder nicht geladen (hast Du bei Dir auch wirklich mal alle 10 Bilder durchgeklickt, ob alle da sind und nicht einige nur schwarz sind)?

Auch wenn ich den Timer z.B. von 1 auf 100, 500, 700 erhöhe, immer fehlen Bilder.

Erst wenn ich das so ergänze, werden alle Bilder geladen.

Delphi-Quellcode:
Synchronize(FForm.ShowSplashLoading);
  try
    Synchronize(FImages.Load); // <-- Hier mit Snchronize gehts

  finally
    Synchronize(FForm.HideSplashLoading);
  end;
Ich habe gesehen, dass Du Dir die Mühe gemacht hast, überall mit einer Critical Section zu arbeiten. Das kann sonst schon eine richtige und notwendige Sache sein, aber vom Programmablauf ist das hier m.E. nicht erforderlich. Das erste Bild wird erst geladen, wenn der Bild-Lade-Thread fertig ist. Ansonsten wird immer in einfachen Events des Mainthreads auf die Bilder Zugriff genommen.

Was mir gerade auffällt: Die Mainform hat auch eine Private Eigenschaft "FImages" und im FormCreate wird diese Form-Variable dem Thread zugewiesen.

Insofern macht das zusätzliche Synchronize doch Sinn, denn letztlich wird hier im Loader-Thread doch auf eine Variable des Hauptthreads zugegriffen!

Übrigens Danke Sebastian, dass Du das mal bei QC gemeldet hast, bin gespannt, was da am Ende bei rauskommt.
  Mit Zitat antworten Zitat