While schleife mit anderer Funktion abbrechen?

  • Hallo Community

    Bin totaler anfänger was das Programmieren betrifft.


    Nun zu meinem Problem:
    Ich habe WebIOPi am RPi laufen um damit einen Roboter zu steuern. Nun benötige ich eine funktion mit While schleife die bei tastendruck im browser beginnt. Da man auch fürs Auslassen des buttons eine funktion setzen kann, dachte ich ich könne mit einer anderen funktion welche beim auslassen getriggert wird die while schleife beenden, jedoch denke ich dass man ja während einer while schleife nichts anderes tun kann da der RPi ja die schleife abarbeitet.

    Die schleife soll dazu dienen alle x millisekunden "SetServoAngle" zu erhöhen/senken und beim Loslassen des buttons soll diese schleife abgebrochen werden via funkion(macro für webiopi)

    Also ich möchte konkret wissen wie ich außerhalb der whileschleife diese unterbrechen kann, mittels einer anderen funktion. Das andere prblem ist, dass ich denke dass WebIOPi nur ein Script handlen kann bzw. nur eines laufen kann wo der browser dann auf die macros vom pythonscript zugreift.

    Ich hoffe ihr meint auf was ich hinaus will ^^

    Grüße

  • Verpass deiner while-Schleif ein Abbruchkriterium.

    Dieses erfüllst du dann beim Triggern beim "Auslassen". WÄre sinnvoll, wenn es eine ganz normale boolsche Variable wäre. Initiiert wird sie mit False und beim Triggern des zuvor genannten Knopfes stellst du sie auf True.
    In dert while-Schleife prüfst du dann, welchen Status sie hat. Ist sie true, brichst du die Schleife ab.

    Wenn aber nur ein Script ausgeführt werden kann zur selben Zeit, dann klappt das da oben nicht.

    Einmal editiert, zuletzt von rpi-noob (18. Mai 2016 um 16:20)

  • Hallo saixo,

    für solche Zwecke gibt es in vielen Programmiersprachen (so Python und Icon) die Anweisung

    Code
    break

    Dies veranlasst, dass die Programmausführung die aktuelle Schleife verlässt und nach der Schleife weitermacht.

    Ich persönlich halte dioes für keinen guten Programmierstil - aber wenn die Möglichkeit vorgesehen ist und der Jung-Programmierer keine anderen Mittel kennt, "sauberer" zu progrmmieren, warum nicht?

    Ich habe überigens schon mal etwas gesehen wie:

    Code
    if bedingung then break break break

    Hier schießt also jemand die Programmausführung gleich aus drei verschachtelten Schleifen heraus. Wohl dem, der den Code durchblicken muss.

    Ansonsten bedeutet saubere Programmierung: Die Bedingung findden, die die while-Schleife beim nächsten Durchlauf beendet. Ist besser nachvollziehbar und wird Dir bei jedem Code-Review gedankt werden.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo

    Danke dir für deine antwort.

    Ich weiß nur nicht ob das überhaupt funktioniert wie ich es brauche. Ich kann für "Push" und "Release" jeweils eine Funktion aufrufen lassen, müsste also aus einer funktion heraus die while schleife eine anderen abbrechen können oder kann man das iwie anders bewerkstelligen? 8| während einer whileschleife kann ja nichts anderes ausgeführt werden oder soll ich es in der whileschleife immer die andere funktion mit einbinden? :(

  • Hallo Saixo,


    Ich weiß nur nicht ob das überhaupt funktioniert wie ich es brauche. Ich kann für "Push" und "Release" jeweils eine Funktion aufrufen lassen, müsste also aus einer funktion heraus die while schleife eine anderen abbrechen können oder kann man das iwie anders bewerkstelligen? 8| während einer whileschleife kann ja nichts anderes ausgeführt werden oder soll ich es in der whileschleife immer die andere funktion mit einbinden? :(

    Das klingt so kompliziert, dass ich Dir nicht folgen kann. Und deswegen vermute ich auch, dass Du auf einem ganz falschen Dampfer in die falsche Richtung unterwegs bist.
    Es scheint um Bedienelemente in einer GUI zu gehen. Bei Ereignis PUSH soll etwas passieren. Bei Ereignis RELEASE soll etwas passieren.

    Zunächst sind das einmal vollkommen unabhängige Ereignisse. Zuerst ein PUSH, dann ein RELEASE.

    Wenn Du ein wenig drüber nachdenkst, solltest Du zu folgender Erkenntnis gelangen:
    - PUSH-Ereignis auf einem Bedienelement und RELEASE-Ereignis auf einem anderen Bedienelement sollte zu keiner Umsetzung in der Ereignisbehandlung führen.
    - PUSH-EREIGNIS und RELEASE-Ereignis auf dem gleichen Bedienelement führt zu einer Umsetzung (AKTION)

    Aber: Denke mal darüber nach, welches Ereignis (PUSH oder RELEASE) das führende Ereignis ist? PULL? :s RELEASE? :s

    Na? Natürlich ist dies RELEASE! Denn erst nach Loslassen eines Bedienelementes soll etwas passieren.

    Also kannst Du Ereignisse auf PUSH abhaken. Wenn überhaupt kannst Du eine Hilfe einblenden (Erläuterung, was das Bedienelement "kann"). Ansonsten auch ganz ignorieren.

    Und dann wird sicherlich keine Schleife starten sondern nur eine Aktion gestartet. Denn die GUI soll ja weitere Ereignisse erkennen können. Also wird bei PUSH etwas eingeblendet und bei NICHT-PUSH wieder ausgeblendet. EIN - AUS. Keine WHILE mit BREAK :no_sad:


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (18. Mai 2016 um 21:41)


  • für solche Zwecke gibt es in vielen Programmiersprachen (so Python und Icon) die Anweisung

    Code
    break

    Was hilft ihm denn break? Er weiß ja scheinbar nicht mal, wie er im Programmfluß prüfen kann, wie er den Schleifenabbruch erkennen kann. Und so wie ich das lese, reicht ihm, wenn er eine Abbruchbedingung für seine while-Schleife hat.

    Ich habe schon fast gedacht, daß es sich dabei um zwei Prozesse bzw. zwei Threads handelt und bräuchte dann andere Werkzeuge, um von außen eine Schleife abbrechen zu können.

    Ganz einfach in einer Pseudoprogrammiersprache:

    while button gedrückt
    mach was

    Break ist hierfür nicht zwangsläufig notwenig und wirklich keine saubere Programmierung. Das sieht wie eine endlosschleife auf, die nur durch break beendet wird.


    Gut, ich kenne Python nicht, kenne break aber von der Programmiersprache C.

    Einmal editiert, zuletzt von Neutrino35 (18. Mai 2016 um 22:29)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!