Hilfe Endlosschleife

Anfängerfragen zum Programmieren mit PureBasic.
Sputnik
Beiträge: 8
Registriert: 07.06.2005 11:08

Hilfe Endlosschleife

Beitrag 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.
Zuletzt geändert von Sputnik am 13.06.2005 22:20, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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]
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sputnik
Beiträge: 8
Registriert: 07.06.2005 11:08

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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²).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sputnik
Beiträge: 8
Registriert: 07.06.2005 11:08

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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. :)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sputnik
Beiträge: 8
Registriert: 07.06.2005 11:08

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sputnik
Beiträge: 8
Registriert: 07.06.2005 11:08

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten