![]() |
Re: Warum AccessViolation?
die endlosschleife war hier nur ein beispiel. übrigens habe ich keine prozessor-Belastung von 100%.
|
Re: Warum AccessViolation?
Zitat:
Wenn du die Konsole mittels einer Endlosschlkeife am Laufen lassen willst, kannst du auch einen extra Thread benutzen. |
Re: Warum AccessViolation?
argh. ihr versteht mich nicht oder könnt nicht lesen ;-) . Ich möchte eine GUI für ein FREMDES Consolen-Programm schreiben. In meinem Delphiprogramm prüfe ich in einer schleife, die erst verlassen wird wenn das FREMDE Consolen-Programm beendet ist, ob in der Console neue Ausgaben stehen.
ciao, moin339 |
Re: Warum AccessViolation?
Du möchtest Create so lange aufrufen, bis dein fremdes Programm fertig ist, wenn ich das richtig verstanden habe.
Erstens: Wenn du bei klick Button1 dein Objekt kreierst und danach direkt wieder frei gibst, exisitiert dies natürlich auch nicht mehr, also weg damit. Zweitens: Wenn du in deinen Construktor eine Endlosschleife einbaust, wird dein Objekt nie vollständig kreiert und somit kannst du auch nicht auf das Objekt zugreifen. Dein Konsolenprogramm wird aber irgend wann mal fertig sein, dann wird das Objekt kreiert und dann kannst du auch auf dein Objekt zugreifen. Am besten schmeiß diese Abfrage aus Create und schreibe eine neue Funktion. Dann ist dein Objekt auf jeden Fall mal da --> keine Zugriffsverletzung mehr! Dann baue einfach mal eine Schleife, die auch fertig wird, dann kommst du deiner späteren Anwendung schon näher. Gruß Pascal |
Re: Warum AccessViolation?
Delphi-Quellcode:
In deine alten wurde die Instance noch nihct freigegeben so schon.
TTest = class
private TestString : string; public constructor create; procedure DoSomething; procedure ShowString; end; var Form1 : TForm1; test : TTest; implementation {$R *.dfm} constructor TTest.create; begin inherited; TestString := 'Hallo'; end; procedure TTest.DoSomething; begin while true do begin Application.ProcessMessages; end; end; procedure TForm1.Button1Click(Sender: TObject); begin test := TTest.create; test.DoSomething; test.free; end; procedure TTest.ShowString; begin ShowMessage(TestString); // Exception: EAccessViolation end; procedure TForm1.Button2Click(Sender: TObject); begin test.ShowString; end; Schon mal was von TThread's gehört? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 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