Tapahtumat#
Johdanto#
Tapahtumien avulla voit suorittaa funktioita rinnakkain käyttämällä tapahtumaobjekteja. Sen sijaan, että funktioita tai säikeitä kutsuttaisiin yksi toisensa jälkeen, tapahtumien avulla voit rekisteröidä funktioita ja käynnistää ne kaikki kerralla. Jokainen rekisteröity funktio suoritetaan omassa säikeessään, joten robottisi voi tehdä useita asioita – kuten vilkuttaa TouchLED-valoja ja ajaa – samanaikaisesti.
Alla on luettelo käytettävissä olevista metodeista ja rakentajista:
Event– Luo uuden tapahtumaobjektin.broadcast– Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot rinnakkain.broadcast_and_wait– Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot ja odottaa niiden päättymistä ennen jatkamista.event– Rekisteröi funktion tapahtumaobjektiin, valinnaisesti argumenttien kanssa.
Create an Event Object#
Event luo tapahtumaobjektin, joka hallitsee funktion suoritusta erillisissä säikeissä.
Usage:
Event()
Parametri |
Kuvaus |
|---|---|
Tällä konstruktorilla ei ole parametreja. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast#
broadcast laukaisee tapahtuman, joka käynnistää kaikki rekisteröidyt funktiot erillisissä säikeissä. Tämä metodi ei keskeytä minkään seuraavien funktioiden suoritusta.
Usage:
my_event.broadcast()
Parametri |
Kuvaus |
|---|---|
|
Aiemmin luodun tapahtumaobjektin nimi. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast and wait#
broadcast_and_wait käynnistää tapahtuman, mutta odottaa kaikkien rekisteröityjen funktioiden päättymistä ennen kuin jatkaa seuraavilla funktioilla.
Usage:
my_event.broadcast_and_wait()
Parametri |
Kuvaus |
|---|---|
|
Aiemmin luodun tapahtumaobjektin nimi. |
def move_and_turn():
# Drive forward and turn
drivetrain.drive_for(FORWARD, 150, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)
def main():
# Wait for the event to finish after 3 seconds
move_event = Event()
move_event(move_and_turn)
while True:
if brain.timer_time(SECONDS) > 3:
move_event.broadcast_and_wait()
break
wait(5, MSEC)
brain.print("Movement done.")
# VR threads — Do not delete
vr_thread(main)
Register Functions to an Event#
Kun rekisteröit funktion tapahtumaan, se suoritetaan erillisessä säikeessä, kun tapahtuma lähetetään.
Usage:
event(callback, args)
Parametri |
Kuvaus |
|---|---|
|
Aiemmin luodun tapahtumaobjektin nimi. |
|
Aiemmin määritelty funktio, joka suoritetaan, kun tapahtuma lähetetään. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set and call the event and start driving
move_event = Event()
move_event(dash_lines)
move_event.broadcast()
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)