AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abbrechen einer Prozedur

Ein Thema von Tae · begonnen am 2. Dez 2005 · letzter Beitrag vom 4. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Tae

Registriert seit: 2. Dez 2005
4 Beiträge
 
Delphi 7 Professional
 
#1

Abbrechen einer Prozedur

  Alt 2. Dez 2005, 13:37
Ich bin folgendem Problem bereits des öfteren begegnet:
Wie kann ich ein Programm mitten in der Ausführung abbrechen?

Erst kürzlich haben wir uns mit Turing-Maschinen beschäftigt und solche in Delphi implentiert. Und verschiedene Aufgaben mit ihr bewältigt. Einige davon haben viel Zeit in Anspruch genommen. Man konnte das ganze in der Entwicklungsumgebung natürlich einfach zurücksetzen und somit die Ausführung beenden. Was man aber nicht kann, ist einen Button betätigen, welcher die Routine unterbrechen würde.
Kann man das wirklich nicht? Wie kann ich zu beliebigem Zeitpunkte aussteigen, ohne gleich 'höhere Gewalt' anwenden zu müssen?

Thx für's durchlesen und vllt. sogar für 'nen Lösungsvorschlag?

MFG Tae
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Abbrechen einer Prozedur

  Alt 2. Dez 2005, 13:43
for-, while- oder repeat-Schleife beendet man mit break.
eine function/procedure beendet man mit exit.
die Application wird mit Application.Terminate beendet.
die Application wird mit halt(0) sofort beendet (der Holzhammer).

für mehr Infos:
gib bei der Delphi-Hilfe "halt" ein und klicke dann auf "Ablaufsteuerung".
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Abbrechen einer Prozedur

  Alt 2. Dez 2005, 17:13
Und wenn du meintest, dass während der Arbeit ein Klick auf den Button nicht "beachtet" wurde, dann sieh dir auch noch Delphi-Referenz durchsuchenApplication.ProcessMessages an.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Tae

Registriert seit: 2. Dez 2005
4 Beiträge
 
Delphi 7 Professional
 
#4

Re: Abbrechen einer Prozedur

  Alt 3. Dez 2005, 23:13
letzteres meinte ich. (hab ich mich so undeutlich ausgedrückt?)
THX tigerman33! Jetzt hab ich endlich einen Anhaltspunkt um mich durch die Hilfe zu wühlen ^^

//Edit: Okay, ich habe die Hilfe ein wenig gewälzt und mein Problem auch an sich gelöst. Allerdings nicht schön... Dass ich den Knopf, welcher die Routine aufruft, erneut gedrückt habe wird registriert und auch alles nochmal ausgeführt und danach beim alten weiter gemacht. Aber der Knopf zum Abbrechen wird nur "visuell betätigt" sein OnClick-Event wird erst nachdem die Routine des Start-Knopfes vollendet wurde ausgeführt. Ist das so und damit muss man leben, oder gibt es da etwas das ich nicht erkenne?
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 10:25
Hmm, nein das gehört eigentlich nicht so. Poste am besten mal deinen Code, zumindest die relevanten Teile.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Tae

Registriert seit: 2. Dez 2005
4 Beiträge
 
Delphi 7 Professional
 
#6

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 11:24
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Startangaben(Situation); { Initialisierung }
 Repeat
  Befehlszyklus(Situation);
  { startet das Turingprogramm, wird aufgrund gegebener Startangaben definitiv mehrmals durchlaufen }
  Application.ProcessMessages;
 Until Situation.beendet;
 Endinformation(Situation);
end;
Das ist das OnClick-Event des Startknopfes.

Delphi-Quellcode:
procedure TForm1.bAbbruchClick(Sender: TObject);
begin
 Form1.close;
end;
Das vom Abbruch-Button.
Ich habe auch mal probiert mittels der Zuweisung einer Prozedur zu Application.OnMessage herauszufinden welche Nachrichten denn überhaupt verarbeitet werden... ich habe die Ausfürhung dann immer mal angehalten, wenn sie sich gerade in einer Verzögerungsschleife befand und als nächstes die Nachricht, dass ich einen Knopf drückte verarbeiten müsste. Merkwürdiger Weise waren MSG.message, MSG.wparam und MSG.lparam immer 0.

//Edit: Um, möchtest du noch andere Teile des Quelltextes? Ich denke jedoch, dass andere ist nicht so wichtig.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 11:34
ein Form-Close im Abbrechen teil geht natürlich nicht. Setze lieber eine Variable vom Typ Boolean (zum Beispiel "Canceled") auf True und in der Schleife überprüfst du ob Canceled True ist und brichst diese in dem Fall ab. Hinter der Schleife kannst du dann auch das Close ausführen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 11:34
Eigentlich bräuchte ich noch die Abbruchbedingung (Situation.beendet). Ich vermute aber mal, dass du da gar nicht prüfst, ob auf Abbruch geklickt wurde. So müsste es gehen:
Delphi-Quellcode:
Repeat
  Befehlszyklus(Situation);
  { startet das Turingprogramm, wird aufgrund gegebener Startangaben definitiv mehrmals durchlaufen }
  Application.ProcessMessages;
Until (Situation.beendet) or CancelClicked;

...
procedure TForm1.bAbbruchClick(Sender: TObject);
begin
CancelClicked := true;
Form1.close;
end;
Musst CancelClicked natürlich noch deklarieren und zu false initialisieren. Ob das Close da funktioniert bin ich mir nicht sicher, wenn nicht, würde ich mal versuchen, mit PostMessage ein WM_CLOSE in die MessageQueue zu stellen.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 11:44
er brauch das Close einfach nur hinter die Schleife packen und in dem Fall ausführen wenn CancelClicked auf True ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Abbrechen einer Prozedur

  Alt 4. Dez 2005, 11:56
Stimmt, ist mit Sicherheit auch eleganter als die MessageQueue zu missbrauchen.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz