![]() |
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;
|
Re: Programm stürzt beim abbrechen ab
Mit welcher Meldung schmiert er ab?
|
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... |
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?
|
Re: Programm stürzt beim abbrechen ab
Hallo knolli,
wahrscheinlicht läuft der Speicher über. Bis bald Chemiker |
Re: Programm stürzt beim abbrechen ab
Zitat:
Zitat:
Zitat:
@ chemiker: wie meinst du könnte ich das verhindern? |
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 |
Re: Programm stürzt beim abbrechen ab
Zitat:
Delphi-Quellcode:
Dadurch wird die Listbox nicht nach jeden Eintrag neu gezeichnet, soweit ich weiß.
Listbox1.BeginUpdate;
// Hier alle Einträge hinzufügen Listbox1.EndUpdate; Sollte dein Programm auf jeden Fall schneller machen auch wenn es den Fehler vielleicht nicht behebt. |
Re: Programm stürzt beim abbrechen ab
Delphi-Quellcode:
das funktioniert nicht... oder muss ich noch ne unit einbinden?
listbox1.BeginUpdate;
|
Re: Programm stürzt beim abbrechen ab
Delphi-Quellcode:
ListBox1.Items.BeginUpdate;
|
Re: Programm stürzt beim abbrechen ab
oh danke! das funzt..
|
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] |
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 |
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?
|
Re: Programm stürzt beim abbrechen ab
Ok hier ha ich nochmal den code:
Delphi-Quellcode:
das sind die beiden proceduren, die nach dem abbrechen noch durchlaufen werden sollen.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~ 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; 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... |
Re: Programm stürzt beim abbrechen ab
.. einiges gelöscht, da es nicht zielführend war.
Delphi-Quellcode:
Grüße
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; Klaus |
Re: Programm stürzt beim abbrechen ab
ähm... :?:
was wird damit
Delphi-Quellcode:
bezweckt? :gruebel:
if i mod 20 = 0 then
|
Re: Programm stürzt beim abbrechen ab
Zitat:
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:
Grüße
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; Klaus |
Re: Programm stürzt beim abbrechen ab
Zitat:
|
Re: Programm stürzt beim abbrechen ab
Zitat:
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