Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm stürzt beim abbrechen ab (https://www.delphipraxis.net/112325-programm-stuerzt-beim-abbrechen-ab.html)

knolli 18. Apr 2008 18:21


Programm stürzt beim abbrechen ab
 
Hi,

ich hab im Rahmen einer Projektarbeit in der Schule ein Programm geschrieben. Das Programm filtern Wörter von Internetseiten und trägt sie in eine Listbox ein.

Nun zu meinen Problem:

1. Wenn ich das Prog nur kurz laufen lasse und dann abbreche, stehen nur wenige Einträge in der Listbox und das Prog wird ordnungsgemäß abgebrochen.
2. Wenn ich es länger laufen lasse und so geschätzte 20.000 - 30.000 Wörter in der Listbox stehen, stürzt mein Programm einfach beim Klick auf Abbrechen.
Woran kann denn das liegen? Gibt es irgendwie ein maximum für die Anzahl der Einträge in einer Listbox?

Ich könnte mir vorstellen, dass das Sortieren (was ich nach klick auf Abbruch ausführe) mucken macht. Vielleicht liege ich damit aber falsch.
Also wäre ich echt erleichtert, wenn mir jemand helfen könnte.


code fürs sortiern :-D :
Delphi-Quellcode:
ListBox_Seitenwoerter.Sorted:=True;

mkinzler 18. Apr 2008 18:42

Re: Programm stürzt beim abbrechen ab
 
Mit welcher Meldung schmiert er ab?

knolli 18. Apr 2008 19:04

Re: Programm stürzt beim abbrechen ab
 
Mit garkeiner... er hängt sich einfach auf... im TaskManager steht die exe mit 50% CPU auslastung drin und mehr passiert nicht...
ich gehe davon aus, dass wenn nach ca 30 Minuten nix passiert ist, das Prog abgestürtzt ist...

SirThornberry 18. Apr 2008 19:10

Re: Programm stürzt beim abbrechen ab
 
hast du mal im Delphi die Pause taste gedrückt und geschaut an welcher Stelle er hängt? Benutzt du BeginUpdate und EndUpdate? Warum setzt du sortet mehrfach auf True?

Chemiker 18. Apr 2008 19:11

Re: Programm stürzt beim abbrechen ab
 
Hallo knolli,

wahrscheinlicht läuft der Speicher über.

Bis bald Chemiker

knolli 18. Apr 2008 19:24

Re: Programm stürzt beim abbrechen ab
 
Zitat:

Zitat von SirThornberry
hast du mal im Delphi die Pause taste gedrückt und geschaut an welcher Stelle er hängt?

Nein das hab ich noch nicht gemacht... werd ich gleich mal machen...
Zitat:

Benutzt du BeginUpdate und EndUpdate?
Nein, ich weiß nichtmal was das ist :?
Zitat:

Warum setzt du sortet mehrfach auf True?
Wer sagt das ich das mache? Wo hast du das gelesen? Nein ich hab ein einziges mal .sorted:=true stehen..



@ chemiker:
wie meinst du könnte ich das verhindern?

Chemiker 18. Apr 2008 19:33

Re: Programm stürzt beim abbrechen ab
 
Hallo knolli,

in dem Du die Einträge zählst und bei einer bestimmten Anzahl eine Abbruch Bedingung
formulierst. z.B. Count = 10000 dann keine weiteren Einträge in die Listbox vornehmen.

Bis bald Chemiker

everdream 18. Apr 2008 19:36

Re: Programm stürzt beim abbrechen ab
 
Zitat:

Zitat von knolli
Zitat:

Zitat von SirThornberry
Benutzt du BeginUpdate und EndUpdate?

Nein, ich weiß nichtmal was das ist :?

Delphi-Quellcode:
Listbox1.BeginUpdate;
// Hier alle Einträge hinzufügen
Listbox1.EndUpdate;
Dadurch wird die Listbox nicht nach jeden Eintrag neu gezeichnet, soweit ich weiß.
Sollte dein Programm auf jeden Fall schneller machen auch wenn es den Fehler vielleicht nicht behebt.

knolli 18. Apr 2008 20:31

Re: Programm stürzt beim abbrechen ab
 
Delphi-Quellcode:
listbox1.BeginUpdate;
das funktioniert nicht... oder muss ich noch ne unit einbinden?

Fussball-Robby 18. Apr 2008 20:35

Re: Programm stürzt beim abbrechen ab
 
Delphi-Quellcode:
ListBox1.Items.BeginUpdate;

knolli 18. Apr 2008 20:40

Re: Programm stürzt beim abbrechen ab
 
oh danke! das funzt..

knolli 18. Apr 2008 21:20

Re: Programm stürzt beim abbrechen ab
 
Liste der Anhänge anzeigen (Anzahl: 1)
so jetzt hab ich aber immernoch das problem das mein programm abstürzt...

ich poste mal meinen code:

Code entfernt


[edit=Matze]Code, wie knolli es wollte, entfernt. Eine kürzere Version wird folgen. MfG, Matze[/edit]

Klaus01 22. Apr 2008 08:40

Re: Programm stürzt beim abbrechen ab
 
Vielleicht kannst Du ja sagen, mit welcher Meldung das Programm abstürzt.
Oder bleibt es nur "hängen"?
Wenn es zu hängen scheint, hast Du in Deinen (langen) Schleifen
application.processMessages verwendet?

Wenn es abstürzen sollte, kannst Du ungefähr eingrenzen
wann das passiert. Hast Du schon einmal Haltepunkte
in Deinen Code eingefügt.
Damit kannst Du dirch zu der Stelle vortasten wo es denn knallt.
F7 und F8 um Dein Programm schrittweise abzuarbeiten sind da acuh recht hilfreich.

Grüße
Klaus

Luckie 22. Apr 2008 08:48

Re: Programm stürzt beim abbrechen ab
 
Schön, dass du uns jetzt hier über 760 Zeilen Code gepostet hat. Meinst du nicht auch, es wäre sinnvoller nur die relevanten Routinen zu posten, anstatt alles? Und uns zu sagen, wo das Problem auftritt?

knolli 22. Apr 2008 16:43

Re: Programm stürzt beim abbrechen ab
 
Ok hier ha ich nochmal den code:

Delphi-Quellcode:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~ Wörter filtern ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TWortsuche.Filtern(Sender: TObject);
var
  iLauf:integer;
begin
  For iLauf:=0 to Listbox_Seitenwoerter.Items.Count-1 do
    Begin
      IF Sperrliste.ListBox1.Items.IndexOf(ListBox_Seitenwoerter.Items[iLauf])< 0 then
      begin
        IF LENGTH(Listbox_Seitenwoerter.Items[iLauf])>1 then
        begin
        ListBox_NichtSperrliste.Items.Add(ListBox_Seitenwoerter.Items[iLauf]);
        Listbox_NichtSperrliste.Refresh;
        end;//if
      end;//if
    end;//for
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~ Wörter doppelte zählen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TWortsuche.Zaehlen(Sender: TObject);
var i,iZahler:integer;
    sString:string;
begin
  while ListBox_NichtSperrliste.Items.Count<>0 do
  begin
    sString:=ListBox_NichtSperrliste.Items[0];
    iZahler:=0;
    i:=0;
    while i<=ListBox_NichtSperrliste.Items.Count-1 do
    begin
      If ListBox_NichtSperrliste.Items[i] = sString then inc(iZahler);
      inc(i);
    end;//while2
    For i:=1 to iZahler do
    begin
      If ListBox_NichtSperrliste.Items[0] = sString then ListBox_NichtSperrliste.Items.Delete(0);
    end;//for
    ListBox_Gefiltert.Items.Add(sString);
    ListBox_Anz.Items.Add(intToStr(iZahler));
  end;//while1
end;
das sind die beiden proceduren, die nach dem abbrechen noch durchlaufen werden sollen.
Sie werden einfach auf OnClick aufgerufen.
Immer wenn ich mein programm etwas länger laufen lasse( so ca 30 sek.), dann hängt es in den beiden ewig lange...

hatte schonmal bei 60 sek laufzeit 30 Minuten laufen lassen ohne das was passiert ist...

Klaus01 22. Apr 2008 18:59

Re: Programm stürzt beim abbrechen ab
 
.. einiges gelöscht, da es nicht zielführend war.

Delphi-Quellcode:
procedure TWortsuche.Filtern(Sender: TObject);
var
  iLauf:integer;
begin
  ListBox_NichtSperrListe.items.BeginUpdate;
  For iLauf:=0 to Listbox_Seitenwoerter.Items.Count-1 do
    Begin
      if i mod 20 = 0 then
        application.processMessages;
      IF Sperrliste.ListBox1.Items.IndexOf(ListBox_Seitenwoerter.Items[iLauf])< 0 then
      begin
        IF LENGTH(Listbox_Seitenwoerter.Items[iLauf])>1 then
          begin
            ListBox_NichtSperrliste.Items.Add(ListBox_Seitenwoerter.Items[iLauf]);
            Listbox_NichtSperrliste.Refresh;
          end;//if
      end;//if
    end;//for
  ListBox_NichtSperrListe.items.EndUpdate;
end;
Grüße
Klaus

knolli 22. Apr 2008 20:57

Re: Programm stürzt beim abbrechen ab
 
ähm... :?:
was wird damit
Delphi-Quellcode:
if i mod 20 = 0 then
bezweckt? :gruebel:

Klaus01 22. Apr 2008 21:03

Re: Programm stürzt beim abbrechen ab
 
Zitat:

Zitat von knolli
ähm... :?:
was wird damit
Delphi-Quellcode:
if i mod 20 = 0 then
bezweckt? :gruebel:

Das wenn i durch 20 ganzzahling teilbar ist ein application.processMessages ausgeführt wird.

Wenn Du lange Schleifen abarbeitest, ich es sinnvoll an und ab ein application.processMessages
aufzurufen. Ansonsten erscheint die Applikation so als ob sie eingeschlafen sei.

Dann bin ich nochmal in mich gegangen und habe
einen kleine Testfall für das zählen der Worte(häufigkeit) erstellt.
Du musst ihn nur noch Deinen Begebenheiten anpassen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Byte;
  zaehler: Byte;
  s:String;
begin
  ListBox1.Items.BeginUpdate;
  ListBox1.Sorted:=true;

  while ListBox1.Count > 0 do
    begin
      zaehler :=0;

      s:= ListBox1.Items[ListBox1.Items.Count-1];
      for i:=ListBox1.Items.Count-1 downto 0 do
        if ListBox1.Items[i] = s then
          begin
            application.processMessages;
            inc(zaehler);
            ListBox1.Items.Delete(i);
          end;

      Memo1.lines.add(format('%d %s',[zaehler,s]));
    end;
  ListBox1.Items.EndUpdate;
end;
Grüße
Klaus

everdream 22. Apr 2008 22:53

Re: Programm stürzt beim abbrechen ab
 
Zitat:

Zitat von Klaus01
Zitat:

Zitat von knolli
ähm... :?:
was wird damit
Delphi-Quellcode:
if i mod 20 = 0 then
bezweckt? :gruebel:

Das wenn i durch 20 ganzzahling teilbar ist ein application.processMessages ausgeführt wird.

Dass i bei dir iLauf heißt, hat Delphi dir sicher schon gesagt.

knolli 23. Apr 2008 13:07

Re: Programm stürzt beim abbrechen ab
 
Zitat:

Zitat von everdream

Dass i bei dir iLauf heißt, hat Delphi dir sicher schon gesagt.

das i bei mir iLauf ist weiß ich selber... ich wollte nur wissen, warum da geteilt wird...
jetz weiß ichs ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz