Seite 1 von 3
Hilfe Endlosschleife
Verfasst: 12.06.2005 18:02
von Sputnik
Hallo,
ich hab erst kürzlich mit PureBasic angefangen und von der Windows-Programmmierung noch wenig Ahnung. Vielleicht kennt jemand von euch Liberty Basic. LB hat für Textmode Programme keine Konsole sondern ein normales Window für die Ausgabe vom Print etc. Als ersten Versuch in PB wollte ich mal dieses 'MainWin' simulieren. Es sollte ein Programm-Gerüst werden mit Prozeduren für Print, Input, Locate usw. in das man einfache
Basic Programme einfügen können sollte, deren Ausgabe dann in einem EditorGadget angezeigt werden. Die Prozedur für String Input hab ich schon mal hingekriegt aber jetzt komm ich nicht mehr weiter. Meine Funktion 'Pause' fällt einfach immer in eine Endlosschleife. Es sieht so aus als ob in der Prozedur die lokalen Variablen durcheinander kommen.
So wie es unten steht läuft es bei mir unter Windows 98, PureBasic v3.93 und jaPBe v2.5.4.22. Um den Fehler zu sehen bitte den Kommentar vor 'LB_Pause' entfernen und mit Debugger starten. Mach ich da etwas was man einfach nicht tun darf oder ist das ein Bug? Der Compiler meckert jedenfalls nicht.
Gruß
Gerd
Code: Alles auswählen
; Code gelöscht. Wollte hier kein dummes Zeug stehen lassen.
; FakeReturn hat definitiv nichts in Prozeduren verloren.
; Korrigierte Fassung steht weiter unten.
Verfasst: 12.06.2005 18:40
von ts-soft
Also eine Event-Schleife in einer For-Next-Schleife hab ich noch nicht gesehen. Du hast Dir Teilweise etwas zu viel Arbeit gemacht. Versuchs mal so zu ändern das Du nur noch einen Event-Loop hast, und am besten mit WaitWindowEvent(). Das was Du in LibertyBasic gelernt hast, würde ich am besten schleunigst vergessen. Stöbere doch mal im Code-Archiv, damit Du die etwas andere Rangehensweise verstehst. Vor allem bei der Ereignisbehandlung. Auch Goto und FakeReturn sind überflüssig. Sprungmarken sind auch nur in seltenen Fällen erforderlich. Ich hoffe diese Hinweise helfen Dir ein wenig.
[edit]Hab den Hinweis im Source überlesen, wegen Nachbau, sorry[/quote]
Verfasst: 12.06.2005 18:58
von Sputnik
Ich hab auch lange gerätselt ob das erlaubt ist die Events an mehr als einer Stelle abzufragen. Aber erstens gehts bei meiner Problemstellung wohl kaum anders und dann hab ich mal im Source von jaPBe nachgesehen und gefunden, daß da auch EventLoops in Prozeduren vorkommen. In der Hilfe steht auch nichts gegenteiliges.
Hat das mal jemand im Debugger laufen lassen?
Gruß
Gerd
Verfasst: 12.06.2005 19:08
von ts-soft
Sputnik hat geschrieben:Ich hab auch lange gerätselt ob das erlaubt ist die Events an mehr als einer Stelle abzufragen.
Es ist schon erlaubt, jedoch wenn sich das Programm in einer Deiner Event-Schleifen befindet, werden auch nur diese abgearbeitet. Das kann Probleme bringen. Helfen könnte ein Windows-Callback, das immer abgearbeitet wird. In LibertyBasic wird so eins ja intern erzeugt und mit den Werten Deines "LB-Skripts" bestückt. Sei nicht böse, aber LibertyBasic ist nunmal ein Interpreter mit P-Code Compiler. Ich selber verwende sowas ähnliches ja auch noch (Profan²).
Verfasst: 12.06.2005 19:22
von Sputnik
Also ich finde daß das mit LibertyBasic nix weiter zu tun hat. Ich will nur das, was man sonst in Purebasic in eine Konsole ausgeben würde in ein EditorGadget ausgeben. Ich hab mich nur etwas am Aussehen von dem LB MainWin orientiert. Ich finds halt einfach netter wenn eine Zahlenkolonne nicht oben auf nimmer wiedersehn aus dem Fenster rausscrollt.
Gruß
Gerd
Verfasst: 12.06.2005 19:37
von ts-soft
Ich kann mich schwach erinnern, dieses Textfenster, das bei jeder Anwendung erscheint, wenn man da nicht eine Option setzt. Sorry, aber ich hab mir das nur sehr Oberflächlich angesehen. Kann nützlich sein, für Logbuch-Ausgaben usw. Wenn's richtig funktioniert werde ich es mir nochmal ansehen, ich denke das wirste Wohl schaffen.

Verfasst: 12.06.2005 19:50
von Sputnik
Ich hätte halt gerne eine Erklarung dafür gehabt weshalb die Variable 'Event' vor der If Abfrage offenbar eine Zahl enthält die dem zuvor abgefragten Event entspricht und nach dem EndIF immer 1 ist. Mir scheint, daß da der Stack irgendwie beschädigt wird dabei.
Gruß
Gerd
Verfasst: 12.06.2005 19:59
von ts-soft
Sputnik hat geschrieben:Ich hätte halt gerne eine Erklarung dafür gehabt weshalb die Variable 'Event' vor der If Abfrage offenbar eine Zahl enthält die dem zuvor abgefragten Event entspricht und nach dem EndIF immer 1 ist. Mir scheint, daß da der Stack irgendwie beschädigt wird dabei.
Gruß
Gerd
Mit jedem WindowEvent() wird eine Nachricht abgefragt. WaitWindowEvent() wartet solange, bis eine Nachricht vorliegt. Behandelst Du eine dieser Nachrichten, so wird diese aus dem Nachrichtenspeicher gelöscht, ansonsten wird sie weitergereicht, bzw. von Windows selber bearbeitet, z. B. Neuzeichnen des Fensters und ähnliche Dinge.
Verfasst: 12.06.2005 20:05
von Sputnik
Ja und was erklärt das jetzt? Laß das doch einfach mal im Debugger laufen dann erkennst Du das Problem vielleicht.
Gruß
Gerd
Verfasst: 12.06.2005 20:18
von ts-soft
>> Until Event = 0 ; Event wird niemals 0 -->
Du hast es Vollkommen erkannt, Event wird niemals 0, es sei denn du setzt es auf 0. Windows setzt es höchstens auf #True (1) wahr (erledigt). Du solltest Dir wirklich noch ein paar Beispiele der Hilfe oder hier im Forum ansehen.