Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Endlosschleifen von Außerhalb abbrechen
HenryHux - Mo 11.10.10 09:48
Titel: Endlosschleifen von Außerhalb abbrechen
Hi,
ich habe in einem Programm eine repeat-Schleife, welche unter manchen Bedingungen zur Endlosschleife wird.
Schleifenbedingungen kann ich immoment nicht anders setzen, deswegen suche ich nach einer Möglichkeit das Programm zu beenden.
Benutze atm einen Button mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TMain.KillProcessClick(Sender: TObject); begin close(); application.terminate; halt(1); end; |
Weiß, ist nicht gerade ne gute Möglichkeit.
Denn wenn die Schleife zur Endlosschleife "mutiert" ist, hilft close() und application.terminate nichts.
Dann wird halt ausgeführt und der Speicher wird nicht mehr freigegeben...
Hat da vielleicht jemand eine bessere Möglichkeit?
Wie gesagt Schleifenvariablen kann ich atm nicht anders setzen.
Und was passiert eigentlich, wenn ich die Resourcen nicht wieder freigebe? Einfach als unbenutzter Speicher im RAM?
Lg
Herny
platzwart - Mo 11.10.10 09:53
Setze eine weitere Schleifenbedingung, z.B.
weiterMachen: Boolean; Dann noch ein
Application.ProcessMessages einfügen, das sorgt dafür, dass du die GUI weiterhin benutzen kannst (und somit einen Button drücken kannst).
Delphi-Quelltext
1: 2: 3: 4:
| Repeat doSomething; Application.ProcessMessages; Until (bisherigeBedingung and weiterMachen); |
Und dann im
OnClick des Buttons das
weiterMachen auf
false setzen...
JoelH - Mo 11.10.10 09:55
mach dir eine globale bool-Variable und setzt die bei deinem Killclick auf true. In der repeat schleife setzt du diese Variable als weitere endbedingung und kannst so relativ gut die Endlosschleife verlassen ohne gleich alles nieder zu reißen.
Edit: Platzwart war schneller.
HenryHux - Mo 11.10.10 10:02
Also ich post einfach mal die Schleife,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| repeat image1:=0; image2:=0; image3:=0; image4:=0; readinimage1.Click; readinimage2.click; readinimage3.Click; readinimage4.Click; application.processmessages; until (image1>0) and (imaged2>0) and (image3>0) and (image4>0); |
Wenn ich bei until jetzt einfach noch ne Bedingung zusätzlich hinzufüge, bringt mir das hier nichts.
Oder habe ich euch/etwas falsch verstanden?
lg
jaenicke - Mo 11.10.10 10:09
Da wirst du wohl dein Konzept insgesamt korrigieren müssen...
HenryHux - Mo 11.10.10 10:11
Ok. Ich werd das Problem mal hinten anstellen und die gute alte Brechstange weiterhin benutzen :D
Lg
HenryHux - Mo 11.10.10 10:13
Update =)
Habe es einfach mit break gemacht:
Delphi-Quelltext
1:
| if weitermachen=false then break; |
So klappt es ganz gut, und denke wird es auch weiterhin.
Danke lg
iKilledKenny - Mo 11.10.10 11:24
Besser wäre da wohl ein
Delphi-Quelltext
1: 2:
| if not weitermachen then Break; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!