Autor Beitrag
Hendrik
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Mo 07.04.03 17:33 
Hallo

Ich habe eine recht komplexe Datenbankanwendung geschrieben.

Bei dem Betriebssystem Win 98 legt das Programm das ganze System lahm. Man kann die Maus zwar noch bewegen, allerdings lös ein Klick nichts aus. Wenn ich dann Strg+Alt+Entf drücke kommt "Das System ist ausgelastet". Nach drücken einer Taste kommt der Taskmanager. Dort steht mein Programm + [reagiert nicht]

Wenn ich das Programm darüber nun schließe ist Windows wieder ganz normal...

Ich habe keine Aktion die z.B. durch einen Timer regelmässig startet.

Der Fehler tritt bei XP nicht auf. Hat jemand eine Idee, woran das liegen könnte?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mo 07.04.03 18:25 
poste mal etwas code
grez
msch
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mo 07.04.03 18:45 
überprüfe mal die while und repeat schleifen...
oftmals hören die nicht mehr auf, wenn so etwas passiert (->Endlosschleifen) :D ;)
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Mo 07.04.03 19:13 
Fiji-Fighter hat folgendes geschrieben:
überprüfe mal die while und repeat schleifen...
oftmals hören die nicht mehr auf, wenn so etwas passiert (->Endlosschleifen) :D ;)


Aber warum dann bei Windows 98 und bei XP nicht?
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mo 07.04.03 19:56 
weil XP den normalen Anwendungen nicht die ganze Systemlweistung zur Verfügung stellt um eben das einfrieren des ganzen Systems zu verhindern... das gibts bei win98 noch net
Hendrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Mo 07.04.03 20:05 
Hallo

OK. Ich gucke mal wegen den schleifen, aber ich habe keine die mal einfach so ausgelöst werden.

Mit dem Code posten ist das n bisschen doof, das Proggi hat über 3000 Progrogrammierzeilen!
Hendrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Do 10.04.03 12:23 
Hy

Also an den Schleifen liegt es nicht, ich hab es überprüft...

Was kann es denn sonst noch sein`?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 10.04.03 13:05 
Die Zugriffe auf die DP werden wohl sehr zeit- und rechenaufwendig sein. Lösung wäre hier, die Zugriffe auf die DB in Threads auszulagern.
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 10.04.03 14:19 
Titel: Hi Hendrik
Schreibe mal in jede Schleife die du hast

ausblenden Quelltext
1:
  Application.ProcessMessages;					


Dann sollte es funzen. :)

bye
Hendrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Do 10.04.03 21:09 
Hallo

Also ich habe mal eine while schleife programmiert, die zum einfrieren des Programmes führt. Dies verhält sich aber nicht so wie mein Programm. In diesem Fall reagiert nur die Anwendung nicht mehr. Bei mir ist es aber das ganze System.

@ Luckie

Das denke ich nicht.
Der Fehler tritt auch beim laufen des Programmes auf, ohne das irgendwelche Zugriffe erfolgen. Ich brauche das Programm nur zu compilieren und nichts am PC zu machen. Nach einer guten Stunde geht nichts mehr...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 10.04.03 21:27 
Das kann nicht sein. Irgend etwas muß dein Programm machen. Und wenn nach einer Stunde nichts mehr geht, dann nehme ich an, dass dein Programm ständig Ressourcen belegt und sie nicht mehr freigibt. Und irgendwann ist dann eben Schluß mit lustig.
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Fr 11.04.03 00:40 
Titel: Hi ich bins nochmal
Haste es mal mit
Application.ProcessMessages;

probiert weil wenn dein prog in ner schleife was macht ist es ja "blockiert"
so das es auf drücken von buttons oder anderes ned reagiert.

mit processmessages sagst du deinem programm, das es halt immer beim aufruf von processmessages, botschaften aus der warteschlange, die an dein prog gerichtet sind, verarbeiten soll.
ich nehme auch mal an das sich im moment dein programm fenster ned verschieben lässt.

also probiers einfach mal und sag dann einfach bescheid

Tschü
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Fr 11.04.03 01:09 
Das hat wohl mit der Verarbeitung der Windowsmessages nichts zu tun, deshalb wird Application.ProcessMessages nichts bringen.
Eher stimmig scheint die Theorie von Luckie. Jag mal MemProof drüber, wenn du das Leck nicht so findest.
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 11.04.03 12:28 
wenn das eine DAtenbankanwendung ist und du Selectabfragen mit Repeat abarbeitest, dann solltest du mal in der Repeatschleife ein Next einbauen. So einen Fehler hatte ich auch schonmal und bei mir hats daran gelegen. Ich progg nämlich auch DB-Anwendungen.

Also vielleicht ist es ja der Fehler. :wink:
Hendrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Fr 11.04.03 12:29 
Also das Proggi verwendet Windowsmessages.

Kann es das sein?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.04.03 12:30 
Und welche von den 23569 Stück? :roll:
Hendrik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324



BeitragVerfasst: Fr 11.04.03 12:34 
Hier mal der Anfang vom Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
  sText: array[0..99] of Char;
  ms: TMemoryStream;
  kennung, statusnr, fmskennung:string;
begin
  fztable.filtered:=false;
  if  Msg.CopyDataStruct.dwData = 0 then begin
        StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
        kennung:=stext;