Ich hab ein altes Programm von mir ausgekramt und und es versucht wieder zu kompilieren. Entwickelt hab ich es auf Delphi 3 und Windows 98. Das Programm machte da keine Progrobleme, weder als Programm selbst, noch wenn ich es in der IDE ausführte. Auch hab ich das Programm unter Windows 2000 kompiliert und auch in der IDE ausgeführt. In all den Fällen hatte ich keine Probleme. Auch hab ich kein Problem, wenn ich es als unter XP unter Delphi 3 oder Delphi 6 kompiliertes Programm ausführe. Progleme hab ich wenn ich das Programm in der IDE unter XP ausführe. Zuerst die Delphi 3 Version. Delphi hängt sich auf. Es nimmt fast das Ganze System mit. Taskmanager aufrufen ist fast unmöglich. Ich muß mein ganzes Können ensetzten, damit ich es wieder zum stoppen bringe und mir mein ganzes Windows nicht abschmiert. Auf jedem Fall ist das ganze System ausgelastet. Manchmal passiert allerdings garnichts. Manchmal klappt es.
Der böse Code ist der:
Delphi-Quelltext
1:
| while btnCancel.ModalResult = mrNone do XYZ; |
Der Sinn der Zeile ist, daß eine Prozedur permanent ausgeführt werden soll bis Cancel gedrückt wird. Die Prozedur XYZ hat Routinen die den Button btnCancel bei Bedarf = mrCancel setzten. Das ist nicht das Problem. Auch ist Application.ProcessMessages nicht das Problem. Also bitte nicht in falsche Richtung konzentrieren. Damit es einige beruhigt, hab ich XYZ zu einer Dummy Prozedur gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure XYZ; begin btnCancel.ModalResult := mrCancel; Application.ProcessMessages; end; |
Das Problem ist also die Schleife selbst. Unter Delphi 6 bekomme ich diese Fehler-Meldung
| Zitat: |
| Zugriffsverletztung bei Adresse 0045A10F in Modul 'MyProgram.exe'. Lesen von Adresse FFFFFFFF. |
Erkennt einer also das Problem?
Wie gesagt, als Programm übersieht das System anscheinend das Problem oder es taucht nicht auf. UNter Delphi 3 gibt es keine Fehlermeldung, aber das Programm hängt sich auf (nur in der IDE). Unter delphi 6 gibt es die Fehlermeldung (nur in der IDE).
Ich hoffe auf kompetente Antworten.