AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wieso stürzt das Programm ab oder...?
Thema durchsuchen
Ansicht
Themen-Optionen

Wieso stürzt das Programm ab oder...?

Ein Thema von Mattze · begonnen am 5. Okt 2006 · letzter Beitrag vom 6. Okt 2006
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Wieso stürzt das Programm ab oder...?

  Alt 5. Okt 2006, 20:22
Hallo,

das verstehe ich nicht, das verstehe ich überhaupt nicht. Was ist denn da los?
Formular mit einem Label und einem Button.
Bitte nur unter der IDE bei Benutzung des internen Debuggers starten!!!
Folgende Formular-Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    sl: TStringList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if assigned(sl) then sl.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: longint;
begin
  sl:=Tstringlist.Create;
  try
    for i:=0 to 1000000 do begin
      label1.Caption:=inttostr(i);
      application.processmessages
    end;
  finally
    freeandnil(sl)
  end;
end;

end.
Versucht mal abzubrechen (durch Click auf den Schließen-Button, oben rechts).
Nur mit Zugriffsschutzverletzung (beim 2. Click drauf). Warum? Und wie umgehe ich das?
Und nun kommentiert mal die einzige Zeile in FormCloseQuery aus und versucht wieder abzubrechen.
Geht nicht! Er stoppt nur solange man clickt und zählt dann weiter!
Über die IDE kann man das aber problemlos sofort abbrechen.
Warum geht das mit dem Schließen-Button nicht, warum geht das über die IDE?
(Bei mir unter Delphi7 Pro passiert.)

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: Wieso stürzt das Programm ab oder...?

  Alt 5. Okt 2006, 20:27
Kein Wunder, Du gibst sl frei in CloseQuery (über ProcessMessages) und greifst nach der Schleife dann nochmal darauf zu

So zB:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Aborted:=True;
  if assigned(sl) then begin
     sl.Free;
     sl:=nil;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: longint;
begin
  sl:=Tstringlist.Create;
  try
    for i:=0 to 1000000 do begin
      label1.Caption:=inttostr(i);
      application.processmessages;
      If Aborted then Break;
    end;
  finally
    freeandnil(sl)
  end;
end;
PS: Dies schließen der Form bedeutet nicht, das aus Schleifen gesprungen wird, die laufen fleißig weiter (u.u. bis es kracht).
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

Re: Wieso stürzt das Programm ab oder...?

  Alt 6. Okt 2006, 07:33
Hallo,

vielen Dank!
Ich dachte immer, bei CloseQuery (oder close) wird erst alles sauber beendet bzw. abgebrochen.
Hatte mir schon gedacht, dass die Schleife danach noch läuft, aber das war eben doch unerklärlich für mich. Wenn das normal ist... Aber unschön ist es, wobei man da sicher auch eine positive Seite finden kann!

Aber wie ist das mit dem Schließen? Warum kann die IDE das und das Schließen des Programmes nicht?
Und warum kann es das Progrmmschließen nicht?
Der gleiche Grund? Also: Schleifen werden immer erst beendet?

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#4

Re: Wieso stürzt das Programm ab oder...?

  Alt 6. Okt 2006, 08:22
Zitat von Mattze:
Aber wie ist das mit dem Schließen? Warum kann die IDE das und das Schließen des Programmes nicht?
Und warum kann es das Progrmmschließen nicht?
Der gleiche Grund? Also: Schleifen werden immer erst beendet?
Viele Fragen, aber ich net Durchblick

Vielleicht erklärt das, was Du wissen möchtest:

Eine Schleife läuft so lange, bis
  • Sie das angegebene Ende erreicht hat
  • Sie mit Break oder Exit abgebrochen wird
  • Oder es wo kracht
Wenn Du in der Schleife Application.ProcessMessages aufrufst, mußt Du damit rechnen, das es dem Anwender zu langweilig wird und er Dein Programm schließt, der Schleife ist das aber egal, die läuft und läuft und...
Also mindestens prüfen ob Application.Terminated True ist, oder Beispiel wie oben verwenden.
Ob jetzt Dein Programm über IDE läuft oder nicht ist der Schleife auch egal, das macht keinen unterschied.

Wenn Du noch mehr Fragen hast, dann suche bitte zuerst im Forum, und erstelle ein neues Thema mit der Frage, wenn Du nichts findest, sonst machen die Modis
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

Re: Wieso stürzt das Programm ab oder...?

  Alt 6. Okt 2006, 17:30
Hallo,

natürlich suche ich erst mal im Forum, ob ein Beitrag zu meiner Frage passt.
Geht das auch anders? Kann ich mir nicht vorstellen, wenn man einigermaßen höflich bleiben will.
Ich habe allerdings nichts gefunden. Wahrscheinlich war ich nicht phantasievoll genug, um mir Frageformulierungen auszudenken. Da ich nicht wusste, was das ist, bin ich natürlich auch nicht auf den Suchbegriff "Schleife" gekommen. Wie machst Du das, wenn Du nicht weißt, wonach Du suchen sollst? Fängst Du bei "A" an? Ist doch wahr! ;-(

Übrigens, die Frage war: Wie kann die IDE das abbrechen - auch wenn es in einer Schleife ist.
Der Taskmanager von Windows killt das zwar auch, aber dann crasht die IDE, wenn sie noch läuft.
Der ProcessExplorer macht aber auch das ordentlich von außerhalb der IDE! Wie das? Der muss doch dann die IDE irgendwie informieren, oder?
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Wieso stürzt das Programm ab oder...?

  Alt 6. Okt 2006, 17:44
Wenn Du ein Programm in der IDE debuggst, schaffst Du damit eine Abhaengigkeit zwischen dem Prozess in dem die IDE laeuft und dem Prozess in dem Dein Programm laeuft. Dem Taskmanager ist das egal, der killt einfach den gewünschten Prozess, worauf dann die IDE ins Leere greift und selber crasht (oder was auch immer, auf jeden Fall ungesund). Der ProcessExplorer könnte da eleganter vorgehen, was der im Detail macht, kann ich Dir aber so ad hoc auch nicht sagen, da müsste ich mal reinschauen. Ist auf jeden Fall nur eine weitere Variante von "bevor Du das Licht im Klo ausmachst, check ob noch jemand drin ist"
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:23 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