"Aufhängen" einer xbase-Applikation (Systemlast 10

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

"Aufhängen" einer xbase-Applikation (Systemlast 10

Beitrag von Markus Walter »

Hi,

ich habe leider bei ein paar unserer Anwender das Problem, dass unsere Anwendung ab und zu "einfriert" und dann eine Systemlast von 100% verursacht.

Bisher haben ausschließlich Anwender, die eine Version unserer Software haben, die mit 1.9 gelinkt ist, das Problem.

Das Problem tritt nicht häufig auf (meistens liegen etliche Tage dazwischen), aber immer wieder. Einen programmatischen Fehler kann ich sicher ausschließen, da das Problem an unterschiedlichen Stellen auftritt und immer wieder an Stellen im Programm, die täglich etliche Male benutzt werden.

Ein Anwender hat das Problem definitiv erst seit wir in auf eine 1.9-Version abgedatet haben.

Unsere Software wird von unseren Anwendern in aller Regel mindestens 1x am Tag neu gestartet, d. h. wir haben es hier nicht mit ultra-langen Laufzeiten zu tun.

Kennt jemand das Problem und/oder hat eine Idee?

Kommt unter XP und Win2003 (im Terminalmodus) vor, HT-/DualCore-Rechner, aber auch bei normalen Pentium...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
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:

Beitrag von Rolf Ramacher »

Hi Markus,


durchläufst du größere Datenmengen - sei es dbf oder auch array ?

dann setze mal innerhalb der schleife ein splee(001). Dann wartet der Rechner 1 hundertstel-sekunde.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Beitrag von Markus Walter »

Hallo Rolf,

nein, solche programatischen Sachen scheiden aus. Es passiert immer wieder an harmlosen Stellen (beim Drücken einer Taste), die am Tag hundertmal benutzt werden.

Ich habe da eher die Event-Verarbeitung in Verdacht...

Ich habe gerade mit Till gemailt, evtl. stellt mir Alaska eine Debugversion der Runtime zur Verfügung (mit logging-Funktionen), die ich bei einem oder 2 Anwender einsetze...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Markus Walter hat geschrieben: harmlosen Stellen (beim Drücken einer Taste), die am Tag hundertmal benutzt werden.

Ich habe da eher die Event-Verarbeitung in Verdacht...
JaNein ...

Ja weil auch ich des öfteren im "otherwise" der Eventloop lande obwohl
ich meine "alle" Tastatur Eingaben abgefangen zu haben ..

Nein weil sowas "gewöhnlich" 0% CPU dann bei mir anzeigt.

Zum "Ja" muss ich noch erwähnen das ich "versuche" teilweise die
"Navigation´s" Tasten (Cursor, PgDn etc.) "umzuleiten". Wenn ich nun
nicht den "Focus" auf dem "XbPart" mit dem "Keyboard-Slot" habe
geht das ganze an die "Main" Eventloop und dort evtl. in das "Otherwise"

Code: Alles auswählen

PROCEDURE MAIN
...
   oDlg := XbpDialog().....
...
   bKeyHandler := {|nKey,uNIL,obj| MAINKEYS(nKey,obj, ...)
   AEval( aControls, {|o| o:keyBoard := bKeyHandler } )
...
   DO WHILE .T.
...
      nEvent := AppEvent( @mp1, @mp2, @oXbp, nTimeout ) // nTimeout

      DO CASE
         //
         // geht hier "ein paar Mal" und hängt dann
         //
*      CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_RIGHT
*         IF oBar:getData()+1 > nDuration
*            oBar:setData( nDuration )
*         ELSE
*            oBar:setData( oBar:getData()+1 )
*         ENDIF
*         Scroll2bar( oBar:getData(), XBPSB_NEXTPOS , ... )
*         setAppFocus(oDlg)
...
STATIC PROCEDURE MAINKEYS(nKey ... )
...
   CASE nKey == xbeK_RIGHT
      //
      // geht 1000 Mal und mehr ...
      //
      IF aoChild[CH_BAR]:getData()+1 > nDuration
         aoChild[CH_BAR]:setData( nDuration )
      ELSE
         aoChild[CH_BAR]:setData( aoChild[CH_BAR]:getData()+1 )
      ENDIF
      Scroll2bar( aoChild[CH_BAR]:getData(), XBPSB_NEXTPOS , ...)
      setAppFocus(aoChild[CH_BAR])
Ich habe also jedem "XbPart" auf dem oDlg den Keyhandler MAINKEYS()
zugewiesen und führe beides Mal die "selbe" Aktion aus. Trotzdem kommt
es in der "Main" Eventloop "irgendwann" zum "hänger" wärend das "selbe"
in MAINKEYS() "immer" funktioniert.

sag deinen User doch, die sollen bei "hängern" mit ALT-C "abbrechen",
dann hast du wenigstens eine XPPFATAL.LOG und kannst ja dann sehen
ob du irgendwo in einer Eventloop "hängst" ... nur sollte das nicht 100%
CPU Last ergeben ...

gruss by OHR
Jimmy
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:

Beitrag von Rolf Ramacher »

Hi Markus,

läuft die Anwendung im Netz? Nicht das dort etwas ist. z.B. es gibt antivirenprogramme, die jeden Netzzugriff prüfen. Dies könnte ein Grund sein, da ich dies schon einige Male erlebt habe.

Trifft diese Phänomen immer nur in Verbindung mit anderen Programmen auf ? Vielleicht immer mit dem gleichen ? Nur an einem PC ? Dann wäre vielleicht dort das Problem zu suchen.

Dies sind einige Tips/Info, da ich diese schon erlebt habe. Denn wenn diese Funktion 99 mal klappt, aber dann das 100. Mal nicht, muß es nicht unbedingt an der Programmierung liegen.

prüf mal nach.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten