| Autor |
Beitrag |
Hendrik
      
Beiträge: 324
|
Verfasst: 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
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 07.04.03 18:25
poste mal etwas code
grez
msch
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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) 
|
|
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: 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)  |
Aber warum dann bei Windows 98 und bei XP nicht?
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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 
      
Beiträge: 324
|
Verfasst: 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 
      
Beiträge: 324
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 76
|
Verfasst: Do 10.04.03 14:19
Titel: Hi Hendrik
Schreibe mal in jede Schleife die du hast
Quelltext 1:
| Application.ProcessMessages; |
Dann sollte es funzen.
bye
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 76
|
Verfasst: 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
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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
      
Beiträge: 312
|
Verfasst: 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. 
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Fr 11.04.03 12:29
Also das Proggi verwendet Windowsmessages.
Kann es das sein?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 11.04.03 12:30
Und welche von den 23569 Stück? 
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Fr 11.04.03 12:34
Hier mal der Anfang vom Code:
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; |
|
|