Programm friert ein

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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. :cry:
Die nächste Überlegung ist, das ganze Ding unter einer anderen Programmiersprache neu zu erstellen. Das dauert aber....

Danke und Gruß

Christof
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm friert ein

Beitrag von Tom »

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
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Programm friert ein

Beitrag von Rolf Ramacher »

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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

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 ?
Falls es nicht eine selten durchzulaufende Schleife ist, dann musst du dir die Records ansehen, die zuletzt gelesen wurden. Ein unpassendes Zeichen?
Excel schreiben sollte nicht das Problem sein, wenn mal alles auf ist und schon geschrieben wurde.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm friert ein

Beitrag von Tom »

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
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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? :wink:
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
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

Christof,

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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Programm friert ein

Beitrag von AUGE_OHR »

Christof hat geschrieben:Ein kompletter Durchlauf dauert zwischen 15 und 45 Minuten.
das ist aber lange ...
Christof hat geschrieben:Im Hintergrund wird Excel geöffnet (ActiveX) und etwas gelesen und geschrieben.
macht das alles Excel ? "dauert" das "schreiben" mit Excel so lange ?

... 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
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Programm friert ein

Beitrag von AUGE_OHR »

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.
das ist bei activeX "fast immer" der Fall weil es ja im "GUIthread" läuft.

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
musst du nun die Event "einfangen" und kannst dann mit Xbase++ darauf "reagieren"

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
Benutzeravatar
Christof
Rekursionen-Architekt
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

Beitrag von Christof »

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

Hi,

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
Antworten