Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 11.10.10 09:48 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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).

ausblenden 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...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: 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.

_________________
mfg. Joel
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 11.10.10 10:02 
Also ich post einfach mal die Schleife,
ausblenden 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;                    //Es wird solange geprüft, bis bestimmte Bilder aufgetaucht sind
    readinimage3.Click;
    readinimage4.Click;
    application.processmessages;
  until (image1>0and (imaged2>0and (image3>0and (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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 11.10.10 10:09 
Da wirst du wohl dein Konzept insgesamt korrigieren müssen...
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 11.10.10 10:11 
Ok. Ich werd das Problem mal hinten anstellen und die gute alte Brechstange weiterhin benutzen :D

Lg
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 11.10.10 10:13 
Update =)

Habe es einfach mit break gemacht:
ausblenden Delphi-Quelltext
1:
    if weitermachen=false then break;					

So klappt es ganz gut, und denke wird es auch weiterhin.

Danke lg
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Mo 11.10.10 11:24 
Besser wäre da wohl ein
ausblenden Delphi-Quelltext
1:
2:
if not weitermachen then
  Break;