Forum: PC-Programmierung Abbruch von Programmen


von Jürgen C (Gast)


Lesenswert?

Hallo,
ich programmiere mit Delphi5 unter Windows XP-Home
und möchte die Bearbeitung einer großen Datei durch den Benutzer
abbrechen lassen.
Als Beispiel habe ich ein Formular mit zwei Butons und einem Label;
Der folgende Ablauf soll mit einem (doppel)Click auf den zweiten
Button unterbrochen werden.

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;

begin
i := 0;
while i < 60000  do
begin;
i := i + 1;
label1.Caption := inttostr(i);
label1.Refresh;
end;
end;

Kann mir bitte einer beschreiben wie ich vorgehen muss, oder nach
was ich suchen muss.

Vielen Dank

Jürgen

von Matthias (Gast)


Lesenswert?

Hi

Verarbeitung und GUI-Ereignis-Behandlung müssen in zwei
unterschiedlichen Threads laufen (was sie eh sollten). Dann kannst du
von deinem GUI-Thread eine Nachricht an den Verarbeitungs-Thread
schicken welcher dann die Verarbeitung geordnet abbrechen kann.

Matthias

von Jürgen C (Gast)


Lesenswert?

Hallo Matthias,
danke für die Information. Ich habe zwar gehofft, dass es soetwas
wie einen "Abbruch-Button" als Komponente gibt. Wie Du schreibst,
werde ich mich jetzt mit der Multithread-Anwendung auseinandersetzen
müssen. Wenigstens habe ich jetzt eine Richtung, in der ich weiter
suchen kann.

Jürgen

von Dunkelmann (Gast)


Lesenswert?

ist aber ganz einfach:

vor der schleife ein

abort:=false;

in der schleife eine Abfrage

if abort then break;


und im onclick-Event des Buttons einfach ein
abort:=true;


weiterhin sollest du in der Schleife von zeit zu zeit
(z.b. bei jedem 1000. durchgang)

 application.processmessages aufrufen,

if (i mod 1000)=0 then application.processmessages;

sonst wird der button nicht abgefragt und das Programm schaut aus als
wär es abgestürzt.

von Jürgen C (Gast)


Lesenswert?

Hallo Dunkelmann,
danke für die Hilfe.

Jürgen C.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.