[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    122

    Subroutine lässt sich nicht beenden

    Hallo!
    Habe folgendes Problem.
    In meinem Anzeigeprogramm springe ich von einer Subroutine in eine andere je nachdem welche Funktionstaste der Benutzer drückt. in der jeweiligen SR frage ich ab was gedrückt wurde. Es kann also passieren dass die gleiche SR öfter aufgerufen wird obwohl sie vorher schon X mal aufgerufen wurde und noch nicht beendet ist. Hoffe ihr versteht was ich meine. Solange nicht Datenfreigabe gedrückt wird können X mal viele Subroutinen noch offen sein.

    Mein Problem ist dass die AS/400 dann beim Beenden der SR sich irgendwie aufhängt und in Endlosschleife läuft.
    Beim Debug habe ich gesehen dass er den LEAVESR ausführt, zum ENDSR springt, dann in die vorherige SR geht, wieder den LEAVSR ausführt, zum ENDSR geht, jedoch dann wieder in die vorherige SR zurückgeht und immer zwischen LEAVSR und ENDSR Schleife läuft.

    Werd noch wahnsinnig. Keine Ahnung was der da macht. Normalerweise müsste er alle SR richtig beenden und wieder zum Programmanfang kommen aber irgendwie packt er das nicht. Habt ihr ne Ahnung was da falsch sein könnte? Vielen Dank

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    das Programm Design!!!
    Finger weg von GOTO, dann passiert sowas nicht!!!

    D*B

    Zitat Zitat von Mr.iSeries Beitrag anzeigen
    Habt ihr ne Ahnung was da falsch sein könnte? Vielen Dank
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Jan 2007
    Beiträge
    122
    Ich Programmiere im Free-Format!
    Ich benutze kein Goto!
    Ich verzweige lediglich von einer SR in die nächste und immer weiter. Jedoch sollte er irgendwann die Subroutinen beenden aber dabei hängt er sich auf.

  4. #4
    Registriert seit
    Oct 2006
    Beiträge
    46

    Subroutine lässt sich nicht beenden

    Hallo,

    so, wie der Fehler beschrieben ist, wird das Format nicht gelesen. Da die betätigten Tasten ermittelt werden sollen, bleit der Prozess normalerweise immer beim Lesen des Formats stehen.

    Weiter kann es sein, daß die Bedingungen für die äusseren Schleifen noch gesetzt sind. Diese vielleicht vorher initialisieren.


    Gruss

    S. Heyden

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Eine Rekursion einer Subroutine ist nicht möglich !

    Ein EXSR ist keine echte Unterroutine sondern wird von RPG(LE) als GOTO behandelt.
    Beim ENDSR wird ein variabler GOTO verwendet, der beim EXSR gesetzt wird.
    Bei der Rekursion zerstört also ein EXSR das Setzen der Rücksprungadresse eines vorherigen EXSR, so dasss nicht mehr korrekt zurückgesprungen werden kann.

    Wenn du Free verwendest, bieten sich hier eben eher Funktionen/Prozeduren an.
    Diese können rekursiv arbeiten, besitzen lokale Variablen und können auch (eher unschönes Design) auf globale Variablen/Dateien zugreifen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    122

    Smile

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Eine Rekursion einer Subroutine ist nicht möglich !

    Ein EXSR ist keine echte Unterroutine sondern wird von RPG(LE) als GOTO behandelt.
    Beim ENDSR wird ein variabler GOTO verwendet, der beim EXSR gesetzt wird.
    Bei der Rekursion zerstört also ein EXSR das Setzen der Rücksprungadresse eines vorherigen EXSR, so dasss nicht mehr korrekt zurückgesprungen werden kann.

    Wenn du Free verwendest, bieten sich hier eben eher Funktionen/Prozeduren an.
    Diese können rekursiv arbeiten, besitzen lokale Variablen und können auch (eher unschönes Design) auf globale Variablen/Dateien zugreifen.
    genau das macht er auch im DEBUG er springt zum falschen EXSR.

    Vielen Dank für die Erklärung.
    Habs im Programm jetzt anders gelöst

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ich würde vermuten, dass die Quelle und das Objekt nicht übereinstimmen und zunächst einmal das Programm neu erstellen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    122
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich würde vermuten, dass die Quelle und das Objekt nicht übereinstimmen und zunächst einmal das Programm neu erstellen.

    Birgitta
    Nein daran liegt es definitiv nicht. Es ist genauso wie Fuerchau es beschrieben hat. Wenn die gleiche SR noch einmal angesprochen wird bevor die davorige (gleiche Subroutine) noch nicht beendet wurde, kommt er durcheinander.

Similar Threads

  1. SBS läßt sich nicht beenden
    By Marimari1009 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 10-01-07, 11:41
  2. Starten und beenden der AS/400
    By Klabautermann in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-09-06, 15:39
  3. Beenden eines Bildschirmprogrammes (RPG)
    By gaby68 in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 14-06-06, 16:27
  4. Jobs lassen sich nicht beenden
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 29-04-04, 10:56
  5. Job in SBS beenden
    By hs in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-12-01, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •