![]() |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
Delphi-Quellcode:
hat nur zufälligerweise so lange gebremst, dass das Framework sich initialisieren konnte. Ist aber wohl eher ein lucky shot als ein wirklicher Fix ;)
OleInitialize
|
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
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:
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.
Synchronize(FForm.ShowSplashLoading);
try Synchronize(FImages.Load); // <-- Hier mit Snchronize gehts finally Synchronize(FForm.HideSplashLoading); end; 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. |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Wenn du alles was im Thread läuft synchronisiert ausführst, dann entzieht man dem Thread seine Daseinsberechtigung.
Ich werde mir das beizeiten nochmal ansehen, da ist auf jeden Fall noch was mit dem Thread los. Diese Umsetzung des Threads finde ich auch sehr gewagt und nicht wirklich stabil. BTW: schau mal hier ![]() Es wird im Übrigen nicht auf eine Variable des Hauptthreads zugegriffen, sondern beide Variablen FImages (Form, ImageDatasource) verweisen auf eine Instanz. Die Variablen sind aber unabhängig voneinander. |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
|
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Um zu erkennen, warum die Bilder nicht geladen werden (bei mir werden alle 10 Bilder angezeigt), ersetz doch mal die Execute-Methode hiermit (damit werden die Exceptions aus dem Thread angezeigt):
Delphi-Quellcode:
procedure TSplashImagesLoader.Execute;
begin if not Assigned( Form ) or not Assigned( FImages ) then Exit; try Synchronize( FForm.ShowSplashLoading ); try FImages.Load; finally Synchronize( FForm.HideSplashLoading ); end; except on E : Exception do Synchronize( procedure begin Application.ShowException( E ); end ); end; end; |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
ABER Deine Aussage "Die Variablen sind aber unabhängig" stimmt das wirklich? Im Oncreate der Form findet ja folgendes statt:
Delphi-Quellcode:
Nach meinem Verständnis verweist dann sowohl Form.FImages und FSplashImageLoader.FImages auf ein und dieselbe Instanz. Oder?
FImages := TImageDataSource.Create;
// Create thread with image loader FSplashImageLoader := TSplashImagesLoader.Create; FSplashImageLoader.Form := Self; FSplashImageLoader.DataSource := FImages; |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
Jeder dieser Variablen kann ich beliebige Werte zuweisen ohne die andere Variable zu beeinflussen. |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
[QUOTE=Sir Rufo;1255522]Um zu erkennen, warum die Bilder nicht geladen werden (bei mir werden alle 10 Bilder angezeigt), ersetz doch mal die Execute-Methode hiermit (damit werden die Exceptions aus dem Thread angezeigt):
Meldung: [dcc32 Fehler] MainFrm.pas(576): E2250 Es gibt keine überladene Version von 'Synchronize', die man mit diesen Argumenten aufrufen kann. Was muss ich ändern, damit es compiliert? |
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
|
AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz