Blockierender vs. nicht blockierender Code - VEX Coding Studio

Holen Sie sich mehr mit VEXcode
Wir empfehlen Ihnen, auf unsere neue Software umzusteigen. VEXcode bietet sowohl blockbasierte als auch textbasierte Optionen, die auf Chromebooks, iPads, Android-Tablets, Windows und Macs funktionieren. Weitere Informationen zum Herunterladen von VEXcode finden Sie unter code.vex.com .
VEX Coding Studio wurde eingestellt und steht nicht mehr zum Download zur Verfügung. Schon heruntergeladen? Das Programm funktioniert weiterhin, wird jedoch nicht mehr unterstützt.
Benutzer, die auf VEXcode umsteigen, können ihre C++/C++ Pro-Projekte zu VEXcode Pro V5 migrieren, indem sie diesem Artikelfolgen.

Schritt 1: Erkennen Sie, ob der Code blockiert oder nicht blockiert

  • Sehen Sie sich die beiden oberen Motor.spin-Befehle neben den grünen Pfeilen an. Grüne Pfeile zeigen nicht blockierende Befehle an.
  • Beachten Sie, dass diese Aktionsbefehle keinen Zielzustand enthalten - nur den rechten Motor vorwärts und den linken Motor rückwärts drehen. Es handelt sich um nicht blockierende Befehle, die weiterhin ausgeführt werden, während das Programm mit den nächsten Befehlen fortfährt.
  • Sehen Sie sich die Befehle Motor.rotateFor und Motor.rotateTo neben den roten Pfeilen an. Rote Pfeile weisen auf blockierende Befehle hin.
  • Beachten Sie, dass diese Aktionsbefehle einen Zielzustand enthalten - um 270 Grad drehen oder um 270 Grad drehen. Sie blockieren Befehle, weil das Programm dies tut, bis es fertig ist, bevor es mit dem nächsten Befehl fortfährt.
  • Sehen Sie sich die Befehle Motor.rotateFor und Motor.rotateTo neben den grünen Pfeilen an.
  • Beachten Sie, dass diese Befehle einen booleschen Parameter waitForCompletion enthalten und auf false gesetzt sind. Das bedeutet, dass die Standardeinstellung, dass der Befehl warten muss, bis er fertig ist (als blockierender Befehl), ausgeschaltet (auf false gesetzt) ist und sie jetzt nicht blockieren. Das Programm startet sie und fährt mit dem nächsten Befehl fort.

HINWEIS: Auch hier sind die Befehle des linken Motors (rotateTo und rotateFor) neben den unteren grünen Pfeilen auf non . gesetzt -blocking durch Setzen des Parameters waitForCompletion auf false. Sie können stattdessen aber auch startRotateTo oder startRotateFor verwenden. Beide startRotate-Befehle sind nicht blockierend und lassen das Programm mit dem nächsten Befehl fortfahren, bevor es abgeschlossen wird.

HINWEIS: Es gibt viele andere Beispiele für blockierende und nicht blockierende Befehle in VCS. Diese Beispiele wurden wegen ihrer Einfachheit ausgewählt.

HINWEIS: Einige Befehle sind aufgrund ihres Codes leicht als blockierend oder nicht blockierend zu erkennen. Zum Beispiel sind Motor.startRotateTo und Motor.startRotateFor offensichtlich von Natur aus nicht blockierende Befehle, da die Aktion gestartet, aber nicht notwendigerweise abgeschlossen wird, bevor das Programm zum nächsten Befehl übergeht.

Schritt 2: Verwenden Sie nicht blockierenden Code, um Befehle zu initiieren und fortzufahren

  • Sehen Sie sich die beiden nicht blockierenden Motor.spin-Befehle neben den oberen grünen Pfeilen an.
  • Beachten Sie, dass der Befehl LeftMotor.spin eingeleitet wird und das Programm dann sofort mit dem Befehl RightMotor.spin fortfährt. Dies ist wichtig, damit beide Motoren gleichzeitig drehen.

HINWEIS: Wenn sie Befehle blockieren, dreht sich zuerst der linke Motor vorwärts, bis er fertig ist. Dann würde sich der rechte Motor rückwärts drehen, bis er fertig ist. Dann würde das Programm weiterlaufen.

  • Sehen Sie sich die Befehle Motor.rotateFor und Motor.rotateTo neben den unteren grünen Pfeilen an.
  • Beachten Sie, dass der in diesen Befehlen enthaltene boolesche Parameter waitForCompletion auf false gesetzt ist und beide daher nicht blockierend sind.

Schritt 3: Verwenden Sie nicht blockierenden und blockierenden Code zusammen, um parallele Prozesse zu haben

  • Sehen Sie sich jetzt noch einmal die Befehle Motor.rotateFor und Motor.rotateTo neben den blauen Pfeilen an. Blaue Pfeile werden verwendet, um parallele Befehle anzuzeigen.
  • Beachten Sie, dass der rechte Motor unmittelbar nach dem linken Motor zu rotieren beginnt, da die waitForCompletion-Parameter der linken Motorbefehle auf false gesetzt sind. Dies ist wichtig, damit sich der Roboter geradlinig vorwärts oder rückwärts bewegt.

HINWEIS: Der Grund, warum die Befehle des linken Motors nicht blockierend eingestellt wurden, ist, dass seine Befehle vor denen des rechten Motors lagen Befehle. Damit ein Paar Motorbefehle gleichzeitig ausgeführt werden kann, sollte der erste nicht blockieren und der zweite blockieren. 

Schritt 4: Verwenden Sie den Sperrcode, um Befehle auszuführen, bis Sie fertig sind

  • Beachten Sie, dass die Befehle des rechten Motors blockieren, damit das Programm beendet wird, bevor es weitergeht.

HINWEIS: Das Programm wartet nur mit den Blockierungsbefehlen des rechten Motors, bis dieser Befehl abgeschlossen ist, bevor es fortfährt.Durch diese Blockierung kann der Programmierer sehen, wie der Roboter stoppt, bevor er mit den nächsten Befehlen fortfährt.

Schritt 5: Verstehen Sie, wie die nicht blockierenden und blockierenden Befehle mit anderen Befehlen funktionieren

HINWEIS: Die Motor.spin-Befehle starten den linken Motor und den rechten Motor in entgegengesetzte Richtungen.Die Schlafaufgabe lässt die Motoren 3 Sekunden lang auf diese Weise rotieren, bevor der linke und der rechte Motor beide durch die Motor.stop-Befehle gestoppt werden. Dann drehen sich der linke Motor und der rechte Motor um 270 Grad vorwärts und bremsen, bevor sie weiterfahren, da der Befehl des rechten Motors blockiert. Dann drehen sich der linke Motor und der rechte Motor vollständig um 270 Grad zurück und bremsen, bevor das Programm beendet wird, da der Befehl des rechten Motors blockiert.

 

For more information, help, and tips, check out the many resources at VEX Professional Development Plus