Hallo zusammen!
Ich habe ein kleines Problem mit einem TThread.
In dem Thread erstelle ich dynamisch eine andere Komponente, die wiederum (u.a.) ein TTimer-Objekt enthält. Das stellt an für sich kein Problem dar. Gibt man jedoch die Komponente am Ende des Thread-Executes mit Free oder FreeAndNil frei, so kommt es zu folgenden Fehlermeldungen:
Mit Debugger:
Zitat:
Im Projekt TimerProject.exe ist eine
Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00000000.
Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
und
Zitat:
Im Projekt TimerProject.exe ist eine
Exception der Klasse EOSError aufgetreten. Meldung: 'Systemfehler. Code: 1400.
Ungültiges Fensterhandle'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Ohne Debugger:
Zitat:
Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.
und
Zitat:
Die Anweisung in "0x00000000" verweist auf Speicher in "0x00000000". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Der letzte Fehler wiederholt sich so lange, bis man den Prozess beendet (Taskmanager).
Das passiert auch, wenn der Timer niemals Enabled wurde.
Führt man das Free bzw. FreeAndNil mit Synchronized aus, kommt es zu keinem Fehler. Aber warum? Bzw. warum kommt es ohne Synchronized zu einem Fehler und wie kann man das verhindern?
Ich habe lange getüftelt, bis ich herausgefunden habe, dass der Fehler überhaupt an dem Timer liegt. Jetzt weiß ich aber nicht mehr weiter.
Meine einzige Vermutung wäre evtl. noch, dass dem Timer evtl. ein gültiges Fensterhandle fehlt???
Um das Problem besser nachvollziehen zu können, habe ich ein kleines Programm geschrieben, das auf das nötigste beschränkt ist. Der Quelltext ist hier angehängt.
Ich bedanke mich schonmal für eure Hilfe!
Grüsse
...Doc