Programm friert ein
Moderator: Moderatoren
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Programm friert ein
Hallo,
ich krieg' die Krise. Das Phänomen hatte ich schon öfter. Aber bisher war's so in ca. 2 von 10 Fällen. Jetzt hab' ich's in 8 von 10 Fällen.
Das Programm läuft auf einem lokalen Laufwerk im Verzeichnis D:\Datenx\Temp\Analysetool
Betriebssystem WindowsXP professional SP3, 3GB RAM
Es öffnet dbf-Dateien inkl. CDX-Index und führt verschiedene Berechnungen durch. Ok. Es laufen ziemlich viele Do-While-Schleifen ab. Habe ich jetzt mal alle mit einem SLEEP(0) vor dem Enddo versehen. Ein kompletter Durchlauf dauert zwischen 15 und 45 Minuten. Je nach Datenmengen. Besonders ärgerlich, wenn die Testdateninstallation jedes Mal bei 2/3 bis 3/4 der Strecke abbricht. Da sind immer so 10-15 min. dahin
Ich hab's schon mal mit ein-/ausschalten des Echtzeitschutzes von Kaspersky versucht. Kein Unterschied.
Und jetzt das Problem. Das Programm friert AN VERSCHIEDENEN STELLEN einfach ein. Es geht nicht weiter. Das Fenster lässt sich sogar noch bewegen (child im Hauptfenster). Allerdings wird der Hintergrund nicht mehr zurückgesetzt, d.h., da ist dann einfach weiß zu sehen.
Ich kann das Ding doch nicht im Windows95-Modus starten. Da lachen mich die Kunden ja aus...
Hat jemand ähnliche Erfahrungen gemacht? Oder noch besser: Hat jemand eine Lösung dafür?
Ok. Mein Compiler ist nicht mehr der Jüngste: Xbase++ (R) Compiler 1.90.331 Apr 26 2006
Ich trage mich mit dem Gedanken, den mal zu aktualisieren. Wenn das Problem dann aber nicht behoben ist, habe ich die A....karte gezogen.
Die nächste Überlegung ist, das ganze Ding unter einer anderen Programmiersprache neu zu erstellen. Das dauert aber....
Danke und Gruß
Christof
ich krieg' die Krise. Das Phänomen hatte ich schon öfter. Aber bisher war's so in ca. 2 von 10 Fällen. Jetzt hab' ich's in 8 von 10 Fällen.
Das Programm läuft auf einem lokalen Laufwerk im Verzeichnis D:\Datenx\Temp\Analysetool
Betriebssystem WindowsXP professional SP3, 3GB RAM
Es öffnet dbf-Dateien inkl. CDX-Index und führt verschiedene Berechnungen durch. Ok. Es laufen ziemlich viele Do-While-Schleifen ab. Habe ich jetzt mal alle mit einem SLEEP(0) vor dem Enddo versehen. Ein kompletter Durchlauf dauert zwischen 15 und 45 Minuten. Je nach Datenmengen. Besonders ärgerlich, wenn die Testdateninstallation jedes Mal bei 2/3 bis 3/4 der Strecke abbricht. Da sind immer so 10-15 min. dahin
Ich hab's schon mal mit ein-/ausschalten des Echtzeitschutzes von Kaspersky versucht. Kein Unterschied.
Und jetzt das Problem. Das Programm friert AN VERSCHIEDENEN STELLEN einfach ein. Es geht nicht weiter. Das Fenster lässt sich sogar noch bewegen (child im Hauptfenster). Allerdings wird der Hintergrund nicht mehr zurückgesetzt, d.h., da ist dann einfach weiß zu sehen.
Ich kann das Ding doch nicht im Windows95-Modus starten. Da lachen mich die Kunden ja aus...
Hat jemand ähnliche Erfahrungen gemacht? Oder noch besser: Hat jemand eine Lösung dafür?
Ok. Mein Compiler ist nicht mehr der Jüngste: Xbase++ (R) Compiler 1.90.331 Apr 26 2006
Ich trage mich mit dem Gedanken, den mal zu aktualisieren. Wenn das Problem dann aber nicht behoben ist, habe ich die A....karte gezogen.
Die nächste Überlegung ist, das ganze Ding unter einer anderen Programmiersprache neu zu erstellen. Das dauert aber....
Danke und Gruß
Christof
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Programm friert ein
Bei mir war es meist eine Schleife, die - wegen was auch immer - nicht mehr verlassen wurde ... könnte es am Inhalt der Daten liegen ?
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Programm friert ein
Mit Alt-C abbrechen und in der XPPFATAL nachschauen, wo er hängt. Das Problem ist mit ziemlicher Sicherheit hausgemacht, wenn die Fenster sich noch bewegen lassen.
Herzlich,
Tom
Tom
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Programm friert ein
Christoph
laufen denn irgendwelche statics oder woran erkennst du das nix mehr passiert ?? Ich mache das so, damit man was sehen kann lasse ich statics anzeigen, aber alle 500 datensätze z.b.
laufen denn irgendwelche statics oder woran erkennst du das nix mehr passiert ?? Ich mache das so, damit man was sehen kann lasse ich statics anzeigen, aber alle 500 datensätze z.b.
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Programm friert ein
Sorry Leute,
aber das kann es alles nicht sein.
- Die Schleifen funktionieren ja. Mit dem selben Datenbestand funktioniert es einmal und einmal nicht.
- Alt-C funktioniert nicht mehr. Programm lässt sich nur über den Task-Manager beenden.
- Natürlich habe ich eine Anzeige, was gerade gemacht wird und wie weit die Schleife ist.
Die Kiste hängt auch nicht immer in der selben Schleife. Das ist ja gerade das Problem. Ich kann den Fehler überhaupt nicht lokalisieren. Es gibt auch keine XPPFATAL.LOG, da das Programm ja nicht abbricht sondern in "irgendeinem" Status einfach hängen bleibt und nicht mehr weitermacht. Ich habe auch schon 15 Min. gewartet, um sicher zu sein, dass es nicht einfach nur eine Verzögerung ist. Nichts!
Im Hintergrund wird Excel geöffnet (ActiveX) und etwas gelesen und geschrieben. VIELLEICHT hängt es damit zusammen. Aber noch mal: Was mich so irritiert ist, dass es zu völlig unterschiedlichen Zeitpunkten passiert und manchmal eben auch gar nicht. Dann läuft das Programm einwandfrei durch.
Trotzdem DANKE.
Gruß
Christof
aber das kann es alles nicht sein.
- Die Schleifen funktionieren ja. Mit dem selben Datenbestand funktioniert es einmal und einmal nicht.
- Alt-C funktioniert nicht mehr. Programm lässt sich nur über den Task-Manager beenden.
- Natürlich habe ich eine Anzeige, was gerade gemacht wird und wie weit die Schleife ist.
Die Kiste hängt auch nicht immer in der selben Schleife. Das ist ja gerade das Problem. Ich kann den Fehler überhaupt nicht lokalisieren. Es gibt auch keine XPPFATAL.LOG, da das Programm ja nicht abbricht sondern in "irgendeinem" Status einfach hängen bleibt und nicht mehr weitermacht. Ich habe auch schon 15 Min. gewartet, um sicher zu sein, dass es nicht einfach nur eine Verzögerung ist. Nichts!
Im Hintergrund wird Excel geöffnet (ActiveX) und etwas gelesen und geschrieben. VIELLEICHT hängt es damit zusammen. Aber noch mal: Was mich so irritiert ist, dass es zu völlig unterschiedlichen Zeitpunkten passiert und manchmal eben auch gar nicht. Dann läuft das Programm einwandfrei durch.
Trotzdem DANKE.
Gruß
Christof
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Programm friert ein
Falls es nicht eine selten durchzulaufende Schleife ist, dann musst du dir die Records ansehen, die zuletzt gelesen wurden. Ein unpassendes Zeichen?brandelh hat geschrieben:Bei mir war es meist eine Schleife, die - wegen was auch immer - nicht mehr verlassen wurde ... könnte es am Inhalt der Daten liegen ?
Excel schreiben sollte nicht das Problem sein, wenn mal alles auf ist und schon geschrieben wurde.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Programm friert ein
Kann es sein, dass Dir Excel eigentlich gerade eine Meldung/Abfrage anzeigen will - und Du die einfach nicht siehst? Ich hatte ein ähnliches Problem mit Word, das ich "unsichtbar" mit Daten versorgt habe, um es dann zum Drucken zu zwingen. Die gewählte Textvorlage war aber fehlerhaft, so dass Word vor dem Drucken eigentlich fragen wollte, ob trotz der Druckränder, die außerhalb des bedruckbaren Bereichs lägen, gedruckt werden solle. Das war nicht zu sehen, weil ich Word eben "unsichtbar" (als AX-Komponente) genutzt habe; dieser Dialog ohne Parent (!) erschien erst, wenn man den Desktop anzeigen ließ, und danach in wilder Reihenfolge die Fenster wieder aktivierte, die die App anzeigte. Irgendwo dazwischen hing dann - mit etwas Glück - diese dusselige Word-Abfrage. Ich habe das beseitigt, indem ich Word mitgeteilt habe, dass es keine Abfragen anzeigen und immer mit den Defaults weitermachen soll (DisplayAlerts). Vielleicht will Excel auch etwas von Dir wissen. Die Speicherung einer Datei ist nicht möglich oder so.
Herzlich,
Tom
Tom
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Programm friert ein
Hallo Herbert,
die Datensätze können's nicht sein. Erstens funktioniert es ja manchmal und manchmal nicht (absolut derselbe Datenbestand) und zweitens tritt der Fehler ja bei unterschiedlichen Situationen auf.
Hallo Tom,
das Thema "Excel will was" könnte tatsächlich sein. Ich muss mal genau nachsehen. Üblicherweise habe ich auch DisplayAlerts=False eingestellt. Aber weiß man's so ganz genau?
Spricht nicht eigentlich dagegen, dass es irgendwie "verzögert" mit der unsichtbaren Meldung kommt, da der Stillstand ja nicht immer am selben Punkt auftaucht?
Hab' jetzt mal den WLAN-Adapter ausgeschaltet und den VPN-Client beendet (obwohl ich den nicht immer laufen habe/hatte).
Einmal ist es schon komplett durchgelaufen. Läuft gerade zum zweiten Mal (selber Datenbestand). Es wird also spannend...
Ich werde berichten...
Danke und Gruß
Christof
die Datensätze können's nicht sein. Erstens funktioniert es ja manchmal und manchmal nicht (absolut derselbe Datenbestand) und zweitens tritt der Fehler ja bei unterschiedlichen Situationen auf.
Hallo Tom,
das Thema "Excel will was" könnte tatsächlich sein. Ich muss mal genau nachsehen. Üblicherweise habe ich auch DisplayAlerts=False eingestellt. Aber weiß man's so ganz genau?
Spricht nicht eigentlich dagegen, dass es irgendwie "verzögert" mit der unsichtbaren Meldung kommt, da der Stillstand ja nicht immer am selben Punkt auftaucht?
Hab' jetzt mal den WLAN-Adapter ausgeschaltet und den VPN-Client beendet (obwohl ich den nicht immer laufen habe/hatte).
Einmal ist es schon komplett durchgelaufen. Läuft gerade zum zweiten Mal (selber Datenbestand). Es wird also spannend...
Ich werde berichten...
Danke und Gruß
Christof
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Programm friert ein
Christof,
testweise könntest Du auch
oExcel:Visible := .T.
setzen, dann siehst Du ob es an Excel liegt, dauert dann natürlich länger.
testweise könntest Du auch
oExcel:Visible := .T.
setzen, dann siehst Du ob es an Excel liegt, dauert dann natürlich länger.
Gruß
Klaus
Klaus
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Programm friert ein
Ich hatte vor kurzem dasselbe Problem, Excel fragte "Änderungen speichern ?", das Fenster war jedoch nicht sichtbar. Erst mit ALT-Tab konnte ich das Fenster in den Vordergrung holen. Abhilfe hat dann ein oWorkbook:saved:=.T. vor dem Schließen von Workbook und Excel gebracht, so dass diese Frage (obwohl ich aus Excel nur gelesen hatte) nicht mehr kam.
Viele Grüße
Wolfgang
Wolfgang
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Programm friert ein
Hab' - wie gesagt - mal das WLAN abgeschaltet, da der Laptop eh in der Dockingstation steckt und verkabelt ist. Das Programm ist jetzt schon 3mal problemlos durchgelaufen. Ich werde das mal weiter beobachten.
Excel wird mit "Display alerts=.F. geöffnet. Sollte also nicht meckern. Save() bzw. Saved() wird auch an den ensprechenden Stellen gemacht/gesetzt.
Was mir nicht ganz klar ist, und darum habe ich auch öfter mal ein Sleep(X) eingebaut, ob XBase erst dann weitermacht, wenn Excel "meldet", dass der Befehl ausgeführt wurde. Ich hatte den Eindruck, dass z.B. ein Save(), das ein paar Sekunden dauert u.U. noch unterwegs ist und XBase schon die nächste Arbeitsmappe öffnen will. Auf das Sleep(X) nach dem Speichern muss ich noch mal genau achten. Vielleicht habe ich das irgendwo vergessen.
So. Jetzt mache ich erstmal Feierabend. Vielleicht einnen Wein (bin kein großer Weintrinker/-kenner) oder ein Bier? Wir werden sehen.
Danke und herzliche Grüße
Christof
Excel wird mit "Display alerts=.F. geöffnet. Sollte also nicht meckern. Save() bzw. Saved() wird auch an den ensprechenden Stellen gemacht/gesetzt.
Was mir nicht ganz klar ist, und darum habe ich auch öfter mal ein Sleep(X) eingebaut, ob XBase erst dann weitermacht, wenn Excel "meldet", dass der Befehl ausgeführt wurde. Ich hatte den Eindruck, dass z.B. ein Save(), das ein paar Sekunden dauert u.U. noch unterwegs ist und XBase schon die nächste Arbeitsmappe öffnen will. Auf das Sleep(X) nach dem Speichern muss ich noch mal genau achten. Vielleicht habe ich das irgendwo vergessen.
So. Jetzt mache ich erstmal Feierabend. Vielleicht einnen Wein (bin kein großer Weintrinker/-kenner) oder ein Bier? Wir werden sehen.
Danke und herzliche Grüße
Christof
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm friert ein
das ist aber lange ...Christof hat geschrieben:Ein kompletter Durchlauf dauert zwischen 15 und 45 Minuten.
macht das alles Excel ? "dauert" das "schreiben" mit Excel so lange ?Christof hat geschrieben:Im Hintergrund wird Excel geöffnet (ActiveX) und etwas gelesen und geschrieben.
... ich würde erst ein Array erstellen und es dann "komplett" in einem "Rutsch" nach Excel "schieben" was in 1sec. funktioniert.
gruss by OHR
Jimmy
Jimmy
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Programm friert ein
Hallo Jimmy,
nein, Excel ist nicht dafür verantwortlich, dass es so lange dauert. Es werden aus verschiedenen CSV-Dateien zwischen 20.000 und 200.000 Datensätze in verschiedene Tabellen geladen, diese dann bearbeitet und für unterschiedliche Aussagen später mehrfahr ausgewertet. Es läuft quasi sowas wie ein Script ab. Die Ergebnisse werden dann in einer Exceltabelle gespeichert, dort aufbereitet und letztlich in einer Powerpointshow präsentiert. Die Übergabe mit dem Array habe ich auch schon eingebaut. Ansonsten geht das auch sehr schnell über die Zwischenablage.
Gruß
Christof
nein, Excel ist nicht dafür verantwortlich, dass es so lange dauert. Es werden aus verschiedenen CSV-Dateien zwischen 20.000 und 200.000 Datensätze in verschiedene Tabellen geladen, diese dann bearbeitet und für unterschiedliche Aussagen später mehrfahr ausgewertet. Es läuft quasi sowas wie ein Script ab. Die Ergebnisse werden dann in einer Exceltabelle gespeichert, dort aufbereitet und letztlich in einer Powerpointshow präsentiert. Die Übergabe mit dem Array habe ich auch schon eingebaut. Ansonsten geht das auch sehr schnell über die Zwischenablage.
Gruß
Christof
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm friert ein
das ist bei activeX "fast immer" der Fall weil es ja im "GUIthread" läuft.Christof hat geschrieben:ob XBase erst dann weitermacht, wenn Excel "meldet", dass der Befehl ausgeführt wurde. Ich hatte den Eindruck, dass z.B. ein Save(), das ein paar Sekunden dauert u.U. noch unterwegs ist und XBase schon die nächste Arbeitsmappe öffnen will.
Wenn du "interaktive" mit activeX arbeitest musst du auf die Event achten die das activeX "versendet". Mit
Code: Alles auswählen
oExcel := CreateObject("Excel.Application")
oExcel := oExcel:dynamicCast( ActiveXObject() )
xVar := oExcel:isEventPublished("Name_des_Event")
IF xVar <> NIL
lSuccess := oExcel:SubscribeEvent( xVar , {|a,b,c,d| TuWas(a,b,c,d) }
ENDIF
für die Method o:Save() hab nich noch keinen "passenden" Event gefunden.
"BeforeSave" Event ist ja "vor" dem o:Save() ausgeführt, aber was ist mit der Property o:Saved ?
ich habe nicht so grosse Tabellen wie du aber wenn würde ich so was versuchen
Code: Alles auswählen
xVar := oExcel:isEventPublished("BeforeSave")
IF xVar <> NIL
lSuccess := oExcel:SubscribeEvent( xVar , {|a,b,c,d| oExcel:Saved = .F. }
ENDIF
...
oExcel:Save()
DO WHILE .NOT. oExcel:Saved = .T.
SLEEP(1)
ENDDO
gruss by OHR
Jimmy
Jimmy
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Programm friert ein
Hallo Jimmy,
das mit der Do-While-Schleife beim Speichern ist eine gute Idee. Werde ich mal probieren. Bisher habe ich halt immer ein paar Sekunden mit z.B. Sleep(300) gewartet. Aber das kann entweder viel zu lange sein oder nicht ausreichen.
Bei der Schleifenlösung müsste ich sicher noch eine Zählvariable einbauen, oder? Sonst hänge ich da fest, wenn das Speichern nicht klappt. So hätte ich auch die Chance, darauf zu reagieren.
Danke und Gruß
Christof
das mit der Do-While-Schleife beim Speichern ist eine gute Idee. Werde ich mal probieren. Bisher habe ich halt immer ein paar Sekunden mit z.B. Sleep(300) gewartet. Aber das kann entweder viel zu lange sein oder nicht ausreichen.
Bei der Schleifenlösung müsste ich sicher noch eine Zählvariable einbauen, oder? Sonst hänge ich da fest, wenn das Speichern nicht klappt. So hätte ich auch die Chance, darauf zu reagieren.
Danke und Gruß
Christof
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Programm friert ein
Hi,
in solchen Fällen initialisiere ich die maximale Wartezeit ...
in solchen Fällen initialisiere ich die maximale Wartezeit ...
Code: Alles auswählen
nStartSeconds := seconds()
do while ...
...
if nStartSeconds + nWarteZeitSekunden < seconds() .or. // Wartezeit um, oder
( nStartSeconds > seconds() .and. seconds() > nWarteZeitSekunden ) // Mitternachtswechsel ...
exit
endif
enddo
Gruß
Hubert
Hubert