Autor Thema: Voraussetzungen für [Strg][Pause]  (Gelesen 8308 mal)

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Voraussetzungen für [Strg][Pause]
« am: 07.01.05 - 09:33:31 »
Ich habe bei mir eben ungewollt eine Endlosschleife geschrieben und wollte die dann mit [Strg][Pause] abbrechen. Allerdings hat während dieses Script ausgeführt wurde in meinem Notes Client links unten kein Blitz Symbol geblinkt und er hat auch nicht auf [Strg][Pause] reagiert. Jetzt frag ich mich was ich beachten muss damit ein Script unterbrechbar ist, denn zumindest beim Testen spart das einiges an Zeit.

klaussal

  • Gast
Re: Voraussetzungen für [Strg][Pause]
« Antwort #1 am: 07.01.05 - 12:36:04 »
Evtl. in Schleifen einen Zähler einbauen und bei Erreichen einer bestimmten Grenze Messagebox einblenden bzw abbrechen lassen.

klaus

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #2 am: 07.01.05 - 13:59:46 »
Das ist eine Alternative, die ich bisher auch öfters verwendet habe, aber nicht die Antwort auf die Frage ;)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #3 am: 07.01.05 - 14:29:19 »
Wegen dem Blitzsymbol: Das signalisiert ja nur, dass keine Daten vom oder zum Server übertragen werden und hat mit Deinem Problem gar nichts zu tun.

Bestimmte Aktionen lassen sich per Strg-Untbr nicht stoppen. Das übelste sind Endlosschleifen, in denen in der Schleife immer eine Message- oder Dialogbox aufpoppt. Der Zeitraum zwischen den Aufrufen ist zu kurz, um Strg-Untbr zu erreichen. Bestimmte File-I/O-Ops lassen sich zwischenzeitlich auch nicht killen - und wenn da die eine sofort der anderen folgt ...
Für alle anderen Fälle funktioniert Strg-Untbr nach meiner Erfahrung aber hervorragend. Es wäre daher interessant zu wissen: Was passierte denn bei Dir, als es hiess "In Ewigkeit - Amen !", sprach die Endlosschleife ?

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Voraussetzungen für [Strg][Pause]
« Antwort #4 am: 07.01.05 - 14:34:19 »
Kann das von Bernhard gesagte aus meiner Sicht vollständig bestätigen
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #5 am: 07.01.05 - 15:29:47 »
      While Not(doc Is Nothing)
         If frmDatum = (doc.Jahr(0) & doc.Monat(0)) Then
            i = 0
            While (kndnr(i) <> "")
               If kndnr(i) = doc.KndnNr(0) Then
                  summezeit(i) = summezeit(i) + (doc.AcctSessionTime(0) / 60)
                  summemin(i) = summemin(i) + doc.SessionTimeMin(0)
                  Goto nextdoc
               End If
               i = i + 1
            Wend            
         End If         
nextdoc:
         docacc = docacc +  1
         If aap = 1 Then Print "Dokument " & docacc & " von " & doccount & " verarbeitet..."
         Set doc = view.GetNextDocument(doc)         
      Wend


Während diese Schleife läuft reagiert mein Notes auf nichts mehr. Wenn aap auf 1 gesetzt ist, dann wird immer noch unten angegeben wo das Script schon ist, aber auf [Strg][Pause] reagiert mein Notes trotzdem nicht.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Voraussetzungen für [Strg][Pause]
« Antwort #6 am: 07.01.05 - 17:51:46 »
Naja, mit einem Goto aus einem IF-Block und aus einer While-Wend Schleife auszubrechen ist aber eine ganz schreckliche Konstruktion. Ich bin mir da nicht sicher, ob da der Stack noch sauber aufgeräumt wird. Möglicherweise hängt sich Notes deshalb auf. Räume mal Deine Strukturen auf.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #7 am: 07.01.05 - 20:30:53 »
Also, bei der übersichtlichen Menge an Code würde ich auch auf ein Goto verzichten - das tut nicht nooot. Allerdings kommt Notes damit ohne weiteres klar - da wird schon wieder alles ordentlich aufgeräumt, Jens. Intern wird das ganze in diesem Falle ja sowieso in JUMP-Anweisungen umgesetzt - nix mit Stack.

Aber ich kann ansonsten nix erkennen, was da das Abbrechen via Strg-Untbr verhindern könnte.

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Voraussetzungen für [Strg][Pause]
« Antwort #8 am: 07.01.05 - 20:33:27 »
Mal langsam, die IF und die While-Wend Parameter sitzen auf dem Stack, und ob er eine doppelte Verschachtelung da richtig auflöst, ist nicht sicher. Da müsste man denn mit einem Exit raus. Goto aus While-Wend ist eigentlich nach Sprachdefinition verboten, wenns LS trotzdem schafft, ist das ein Bonus
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #9 am: 07.01.05 - 20:47:46 »
Arges grübeln setzt jetzt ein, Jens. Hast Du Dir schon mal den Code angesehen, den Compiler (und demzufolge sicherlich auch Interpreter) aus sowas generieren ? Man könnte sowas auf Stack(s) tun, aber wozu ? Aus Assemblersicht ist das Wend ein JUMP, das While ein COND JUMP.

Auf jedenfalls braucht man sich aus Sicht des Interpreters bei derartigen Konstrukten in LS keinerlei Gedanken machen. Hinsichtlich des Designs des Codes, der Wartbarkeit, der Lesbarkeit, der Fehlerträchtigkeit, der ... na, Ihr wisst schon, ist es aber alles andere als "state of the art".

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Voraussetzungen für [Strg][Pause]
« Antwort #10 am: 07.01.05 - 21:01:36 »
Ja, habe ich.

Leider ist die seit rund 25 Jahren übliche C-ische Architektur so ausgelegt, dass Parameter - auch bei Aufrufen von Subroutinen/Functions - auf dem Stack liegen. Die Intel-Prozessoren haben genau für diese (von mir aus hirnverbrannte) Architektur den BasePointer (BP-Register) eingerichtet. Das Goto ist ein simpler JMP, das ist richtig, der IF-Block ist aber schon etwas komplizierter, auch wenn ich Dir jetzt nicht auswendig sagen kann, wie der häufig implementiert wird. Beim Wend ist es definitiv so, dass dort Zwischenresultate vom Stack geholt werden und ausgewertet werden. Einen Memory-Leak, den man bei solchen wilden Gotos noch provozieren könnte, befürchte ich jetzt hier nicht, aber ein Stack-Missbrauch, damit ist zu rechnen. Natürlich kann der LS-Code so angelegt sein, dass mit solchen Konstrukten gerechnet wird und diese abgefangen werden, verlassen würd ich mich aber nicht darauf.

BTW: Diese Architektur ist weitgehend für die im Zusammenhang mit den Sicherheitslücken immer wieder erwähnten "Buffer Overflow"s verantwortlich, wird die Parameterlänge aus irgend einem Grund nicht korrekt berechnet, bekommt man über die Daten die Möglichkeit, Rücksprungadressen zu ändern und damit den Code zu manipulieren.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #11 am: 07.01.05 - 21:19:03 »
Oops - buffer overflow unter Zuhilfenahme des LS-Interpreters ? Jetzt wird es aber gewagt, Jens  ;)

Goto ist ein ausdrückliches (wenn auch meist äusserst hässliches) Konstrukt der BASIC-Dialekte. Eine saubere Umsetzung der Standards vorausgesetzt, darf es dabei also keinerlei Probleme geben.

Ich selbst verzichte soweit als möglich auf die Verwendung von Goto (oder wilder Sprünge in anderen Sprachen). Manchmal heisst es aber, bei sehr komplexen Routinen abzuwägen, ob man immer weiter verschachtelt oder immer neue Subs / Functions aufruft, oder bei einer immer gleich bleibenden Bedingungen den weiteren Abfragemechanismus überspringt und mittels Goto "alles auf Anfang" setzt und damit auf das garantierte Anschwellen der Stacks verzichtet.
Meine nun durchaus langjährige) Erfahrung (mit der nochmaligen Betonung: Für jedes Goto, auch wenn im Sprachumfang vorhanden, braucht es schon eine sehr triftige Begründung !) sagt: Goto bewirkt keine Memory leaks noch hat es andere negative Auswirkungen (ausser einem "unsauberen" Code  - zugegebenermassen !). Hierbei geht es natürlich nicht um Erfahrungen mit Routinen, die 15 Dokumente bearbeiten und dann fertig sind. Aber das setze ich jetzt mal als bekannt voraus.
Es gab sogar Fälle, in denen ein JUMP (egal wie in der Programmiersprache nun tatsächlich genannt) geholfen hat, Probleme mit sich aufblähenden Stacks zu vermeiden half und enorme bottle necks beseitigte. Nochmals: Aber nur, wenn es nicht anders vermeidbar war. Sauber ist sowas an sich nicht.

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Voraussetzungen für [Strg][Pause]
« Antwort #12 am: 07.01.05 - 21:25:29 »
Nein, nein, nicht mit LS Buffer Overflow, wollte nur sagen, dass die beschriebene Architektur dieses Problem ermöglicht, da muss man aber lower level Sprache zu Hilfe nehmen, um das ausnutzen zu können, war nur eine Randbemerkung.

Zum Goto: das ist ein Basic-Konstrukt, ist aber nicht überall erlaubt. In den ursprünglichen Normen ist Goto nicht gestattet zum Sprung aus einem Zweig eines If, egal ob aus dem Then-Zweig oder aus dem Else Zweig. Weiter ist Goto nach ursprünglicher Sprachdefinition nicht gestattet zum Verlassen irgendwelcher Schlaufen. Für letzteres wurde dann später in Anlehnung an andere Sprachen das Exit Loop eingeführt.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #13 am: 07.01.05 - 21:33:42 »
Zum Goto: das ist ein Basic-Konstrukt, ist aber nicht überall erlaubt.

Ein Zitat aus einer LS-Doku oder ein Code-Schnipsel. der das Gegenteil beweist, und ich bin fein still. Alternativ akzeptiere ich auch gerne einen rekompilierten VB-Abschnitt (sowas sollte man mal gemacht haben)  ;D

Und nochmals: Für den Einsatz von Goto braucht man mindestens hundert verdammt gute Gründe, sonst ist das grottenschlechter Code.

Und Jens und ich brauchen uns doch nicht wegen grottenschlechtem Code zu hauen, oder ?  ;)

Bernhard

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #14 am: 08.01.05 - 00:56:11 »
Im Endeffekt sind If/Else, Do/While auch nur Abfrage + Goto Kombinationen. Sind also Platzhalter um es dem Entwickler zu ermöglichen übersichtlicher zur programmieren. Aber das ist ja gar nicht das Problem ^^ Das Script läuft ohne Probleme oder Fehler durch. Aber trotzdem lässt es sich immer noch nicht abbrechen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #15 am: 08.01.05 - 01:00:25 »
Im Endeffekt sind If/Else, Do/While auch nur Abfrage + Goto Kombinationen. Sind also Platzhalter um es dem Entwickler zu ermöglichen übersichtlicher zur programmieren.

Sach' ich doch ... Wenn ich demnächst mal Zeit finde (habe heute gerade zuviel Zeit für Nebensächlichkeiten verbraten), dann chekce ich das auch mal. Über Strg-UntBr konnte ich mich bisher aber nicht beklagen - wenn es nicht klappte, war der Grund sonnenklar.

Bernhard

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: Voraussetzungen für [Strg][Pause]
« Antwort #16 am: 02.02.05 - 14:14:02 »
Es liegt an Script-Bibliotheken... werden diese über einen Button oder aus einem Agenten heraus aufgerufen, so kann man nichts machen, auch nicht mit Strg-Pause abbrechen, so lange sie laufen... nen workaround hab ich auch noch nicht gefunden :|

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz